我们在Java中具有泛型,可以使用该泛型来泛化一个类。 我知道对象类是每个类的父类。
当我可以与对象进行类型转换时,为什么需要泛型?
class Response<T>{
T data;
}
class Response{
Object data;
}
以上两个代码段的工作方式都相同。
答案 0 :(得分:3)
这是在泛型存在之前完成的工作:在不知道其特定类型的情况下,您声明了类型为Object
的对象。
但是Object
类型并没有说太多,泛型的好处是,现在我们知道对象的类型是什么,只要在编译时就可以。阅读type erasure,了解Java中泛型实现方式的局限性。
答案 1 :(得分:3)
我可以以“通用”方式列出列表,并执行类似的操作。结果是我不借助反射就无法知道从列表中获得的对象的类型。
List myList = new ArrayList();
myList.add(new Integer(1));
myList.add(new Cat());
Object whatIsThis = myList.get(1);
使用泛型,我可以说
List<Cat> myList = new ArrayList();
myList.add(new Cat());
myList.add(new Integer(1)); // compile time error
myList.add(new Dog()); // compile time error
Cat whatIsThis = myList.get(1); // I *know* this must be a Cat
答案 2 :(得分:0)
铸造(装箱和拆箱)是一项昂贵的运行时操作。泛型没有运行时开销。