首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java将List<Vehicle>转换为List<Object>

Java将List<Vehicle>转换为List<Object>
EN

Stack Overflow用户
提问于 2014-04-12 22:10:27
回答 4查看 447关注 0票数 0

我的应用程序包括Vehicle类和Customer类,其中我有一个接口来添加、删除和搜索每个类。

因此,我为add实现了接口,如下所示:

代码语言:javascript
复制
public void add(Object newObject, List<Object> myList);

因此它接受所有的对象。然而,当我试图从我的应用程序中传递一个车辆列表时,我会收到一个错误,因为它需要一个对象列表。如何将列表转换为列表而仍然更新列表。

这是我初始化的allVehicles列表。

代码语言:javascript
复制
List<Vehicle> allVehicles = new ArrayList<Vehicle>();

这是我用来添加新车辆的方法,在这里我将在allVehicles上获得错误。

代码语言:javascript
复制
addNewCycle.add(addNewCycle, allVehicles);

从接口实现的车辆类的方法。

代码语言:javascript
复制
public void add(Object newObject, List<Object> myList) {
    myList.add((Vehicle)newObject);
}

我的问题是如何将此列表转换为对象列表并在车辆列表上更新它。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-04-12 22:28:45

考虑在界面上使用泛型。

代码语言:javascript
复制
public interface Adder<T> {
    public void add(T newObject, List<T> myList);
}

那你就能做到

代码语言:javascript
复制
public class Vehicle implements Adder<Vehicle> {
    @Override
    public void add(Vehicle newObject, List<Vehicle> myList) {
        myList.add(newObject);
    }
}
票数 4
EN

Stack Overflow用户

发布于 2014-04-12 22:13:37

尝尝这个。

代码语言:javascript
复制
List<Vehicle> allVehicles = new ArrayList<Vehicle>();
// add some vehicles
List<Object> allVehicles1 = new ArrayList<Object>();
allVehicles1.addAll(allVehicles);
// now use allVehicles1 
票数 0
EN

Stack Overflow用户

发布于 2014-04-12 22:52:41

Vehicle转换为Object实际上是徒劳无功的。更好的选择是重新设计界面以支持add方法的泛型:

代码语言:javascript
复制
public <T> add (T data, List<T> list);

在这种情况下,您的类可以很容易地支持这一点:

代码语言:javascript
复制
interface Foo {
    public <T> boolean add(T data, List<T> list);
}

class Bar implements Foo {
    @Override
    public <Bar> boolean add(Bar data, List<Bar> list) {
        return list.add(data);
    }
}

public class TestBar {
    Bar bar = new Bar();
List<Bar> list = new ArrayList<>();
bar.add(bar, list);
    //prints the elements in the list
    //override toString method in Bar for a "nicer" result
System.out.println(list);
}

更好的执行办法是:

代码语言:javascript
复制
class Adder implements Foo {
    @Override
    public <T> boolean add(T data, List<T> list) {
        //totally generic
        return list.add(data);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23036740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档