我的应用程序由Vehicle类和Customer类组成,我有一个界面来添加删除和搜索每个。
因此我实现了我的添加界面,如下所示:
public void add(Object newObject, List<Object> myList);
因此接受所有对象。但是,当我尝试从我的应用程序传递Vehicle列表时,我收到一个错误,因为它期望一个对象列表。如何将列表转换为列表并仍然更新列表。
这是我初始化的allVehicles列表。
List<Vehicle> allVehicles = new ArrayList<Vehicle>();
这是我用来添加新车辆的方法,我在allVehicles上收到错误。
addNewCycle.add(addNewCycle, allVehicles);
从接口。
实现的Vehicle类的方法public void add(Object newObject, List<Object> myList) {
myList.add((Vehicle)newObject);
}
我的问题是如何将此列表转换为对象列表并在车辆列表中进行更新。
答案 0 :(得分:4)
考虑将generics用于您的界面
public interface Adder<T> {
public void add(T newObject, List<T> myList);
}
然后你可以这样做
public class Vehicle implements Adder<Vehicle> {
@Override
public void add(Vehicle newObject, List<Vehicle> myList) {
myList.add(newObject);
}
}
答案 1 :(得分:0)
试试这个。
List<Vehicle> allVehicles = new ArrayList<Vehicle>();
// add some vehicles
List<Object> allVehicles1 = new ArrayList<Object>();
allVehicles1.addAll(allVehicles);
// now use allVehicles1
答案 2 :(得分:0)
将Vehicle
转换为Object
实在是徒劳无功。更好的选择是重新设计界面以支持add
方法的泛型:
public <T> add (T data, List<T> list);
在这种情况下,您的班级可以轻松支持:
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);
}
更好的实施方式是:
class Adder implements Foo {
@Override
public <T> boolean add(T data, List<T> list) {
//totally generic
return list.add(data);
}
}
答案 3 :(得分:-3)
Collection默认是Objects,但是从1.5开始,Sun添加了新的机制来处理称为Generics的对象。换句话说
如果你写
ArrayList arr =new ArrayList();
没有泛型它会起作用。对象和这个词为&lt; 1.4 如果你有
List<Vehicle> allVehicles = new ArrayList<Vehicle>();
并且您想将其转移到ArrayList
的{{1}}
Object