一种类型的实例返回另一种类型的实例列表

时间:2017-05-09 19:38:59

标签: java oop generics

我有一个名为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中是不可能的,因为它应该抛出异常,因为我们不能在兄弟之间进行转换。

0 个答案:

没有答案