gpt4 book ai didi

java - 如何使方法参数类型ArrayList采用不同的对象类型
转载 作者:行者123 更新时间:2023-12-02 10:50:27 26 4
gpt4 key购买 nike

我有一个抽象方法作为抽象类的一部分,并具有以下声明:

abstract public ArrayList<Device> returnDevices(ArrayList<Object> scanResult);

我希望传递的参数是 ArrayList,但 ArrayList 中的类型对象将依赖于继承此父类(super class)并实现 returnDevices 方法的子类。

我认为我可以通过将方法抽象为上面的方法来实现这一点,然后在继承它的子类中执行如下操作:

public ArrayList<Device> returnDevices(ArrayList<Object> scanResult) {

Iterator<Object> results = scanResult.iterator();
while(results.hasNext())
Packet pkt = (Packet) results.next(); // HERE: I cast the Object
}

这很好,不会导致错误,但是当我尝试使用 ArrayList<Packet> 类型的参数调用 returnDevices 时,如下所示:

ArrayList<Packet> packets = new ArrayList<Packet>();
// <----- the "packets" ArrayList is filled here
ArrayList<Device> devices = returnDevices(packets);

...我收到错误:

The method returnDevices(ArrayList<Object>) in the type ScanResultParser is not applicable for the arguments (ArrayList<Packet>)

很明显它拒绝参数类型。实现我想要做的事情的正确方法是什么?

最佳答案

- 这就是 Collections在 Java 中进行类型安全,因此错误的类型不会进入集合,因为集合仅在 `Compilation 期间进行检查时间和期间Runtime .. 即 Cat 对象不应进入 Dog 类型的 Collection。

你可以这样做...

public ArrayList<Device> returnDevices(ArrayList<? extends Object> scanResult)

或者

public <T extends Object> ArrayList<Device> returnDevices(ArrayList<T> scanResult)

关于java - 如何使方法参数类型ArrayList<Object>采用不同的对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13116175/

26 4 0