当我们可以强制转换为Object类时,为什么需要泛型?

时间:2019-05-31 15:45:38

标签: java object generics

我们在Java中具有泛型,可以使用该泛型来泛化一个类。 我知道对象类是每个类的父类。

当我可以与对象进行类型转换时,为什么需要泛型?

class Response<T>{
    T data;
}
class Response{
    Object data;
}

以上两个代码段的工作方式都相同。

3 个答案:

答案 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)

铸造(装箱和拆箱)是一项昂贵的运行时操作。泛型没有运行时开销。