列表对象的继承和转换

Wil*_*ran 5 java inheritance casting list downcast

我无法将List of Fruit转换为List中包含的Fruit子类.

public class Response {
    private List<Fruit> mFruitList;
    public List<Fruit> getFruitList() {
        return mFruitList;
    }
} 

public class Fruit {
}

public class Orange extends Fruit {
}

List<Fruit> oranges = response.getFruitList();
Run Code Online (Sandbox Code Playgroud)

如何投射橙子以使其成为橙类列表?这是一个糟糕的设计模式吗?基本上我从服务器获取JSON响应是一个水果列表.对于Web服务的每个特定调用,我知道Fruit将获得什么子类,因此我需要适当地转换该List.

Zol*_*azs 7

如果您知道每个特定的调用,您将获得什么子类的Fruit,那么您应该使用泛型而不是强制列表.

public class Response<T extends Fruit> {
    private List<T> mFruitList;
    public List<T> getFruitList() {
        return mFruitList;
    }
} 

Response<Orange> response = // create
List<Orange> oranges = response.getFruitList();
Run Code Online (Sandbox Code Playgroud)

编辑:通过模板我的意思是泛型类型.对不起,我现在有太多的C++了