java - 列表对象的继承和转换

标签 java list inheritance casting downcast

我无法将 Fruit 列表向下转换为列表中包含的 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();

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

最佳答案

如果您知道每个特定调用将获得 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();

编辑:我所说的模板是指通用类型。抱歉,我现在 C++ 太多了

关于java - 列表对象的继承和转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6361052/

相关文章:

java - 在java中将返回类型作为参数传递?

python - 从 Python 列表中获取最多的 'diverse' 对集?

c++ - 覆盖派生类中的 protected 变量

c# - 如何防止将方法添加到类中?

java - 在 Eclipse 4.4 RCP 构建中, "The service Plugin converter could not be acquired."

java - 我应该如何重构此方法以遵守 Uncle Bob 规则,即参数不得超过 2 或 3 个?

java - 如何为负数的可抛出异常编写完美的代码?使用assertThatThrownBy

自定义列表适配器中动态创建的 TextView 上的 Android findViewById 似乎不起作用

python - 如何将字符串的元素放入具有特定行为的列表中

c++ - 将继承的方法传递给另一个方法