我有一个名为Type的父类,它有2个直接子项,Grass 和叶子。
class Type { }
class Grass extends Type { }
class Leaf extends Type { }
食物是另一个类型参数的类(T延伸 类型)。 Food类有一个返回泛型类型列表的方法。对于这个例子Food [type Grass] food = new Food(),它必须返回一个Grass列表。
class Food<T extends Type> {
public List<T> createFood(Class i) {
List<T> list = new ArrayList<>();
T t = (T)(i.newInstance());
list.add(t);
return list;
}
}
public class Main {
public static void main(String... a) {
Food<Grass> food = new Food();
List<Grass> list = (List<Grass>) food.createFood(Leaf.class);
}
}
我创建了Grass类型的食物实例。当我打电话给那个功能 通过传递Leaf类作为参数[这样,我可以在方法中创建Leaf的实例]。我将Leaf实例放在数组列表中 并尝试返回列表。虽然该函数必须返回一个Grass列表,但它返回了一个Leaf的列表,据我所知,这在Java中并且代码运行成功是不可能的。任何人都可以详细说明泛型如何在内部工作?在编译时和运行时发生了什么?
在内部类型转换时应该抛出类转换异常 方法,但它没有。理想情况下,它试图投掷叶子 实例到Grass引用,这在Java中是不可能的,因为它应该抛出异常,因为我们不能在兄弟之间进行转换。