【发布时间】:2021-05-26 09:26:59
【问题描述】:
我正在寻找一种类型安全、经过检查的解决方案,以将元素添加到其泛型需要类和接口的列表中。该示例说明了我想做的事情 - 添加一个类型为 Cat 扩展 Animal 并实现 Quadruped 的对象到列表 List<T> ,其中 T extends Animal & Quadruped。
class Example {
public interface Quadruped { };
public static class Animal { };
public static class Cat extends Animal implements Quadruped { };
public <T extends Animal & Quadruped> List<T> getQuadrupedAnimals(){
List<T> result = new ArrayList<>();
Cat cat = new Cat();
result.add(cat); // compile error
return result;
}
}
当然,将cat 转换为B 会解决编译错误,但不会被选中。
有什么解决办法吗?如果没有,有谁知道编译器不允许这样做的原因吗?
【问题讨论】: