2013-06-18 95 views
1

如果我这样做:类型擦除 - 扩展Java泛型类是非通用

public class IntegerList extends ArrayList <Integer> { } 

我是否能够使用IntegerList通常无需担心类型擦除,这意味着我可以使用和创建它们的阵列和动态实例化它们,并且任何兼容的编译器或IDE都能够正确执行编译和运行时类型检查?

+0

虽然我无法解释技术上为什么,我知道答案是肯定的,我做这样的东西没有问题 – fge

+0

是的,这是绝对好的(就语言)。在回答中很难给出任何东西,说实话......在设计方面它不太令人愉快 - 例如,并非每个“列表”都是一个“IntegerList”,所以它不像你可以使用的那样他们互换。但它会*工作*。 –

+0

是的,当然。您可以。这里没有任何疑问.. – iMBMT

回答

1

是的,IntegerList实体类型,这是我想你想说的。

虽然我们在它,ArrayList也是一个具体化的类型,这意味着你可以做ArrayList,你可以做IntegerList做同样的事情。 (但不是ArrayList<Integer>,这不是一个具体化类型。)

+0

的方法不太明白你的意思。我们没有Java中的泛化泛型,而且你所说的内容也不同于对泛化泛型的正常理解。我很想知道你想表达什么,你想介绍一下吗? :) –

+0

@AdrianShum:哪部分你不明白?当你做'新东西[5]'时,'东西'必须是一个具体化的类型。当你做'instanceof something'时,'something'必须是一个具体化的类型。所以这正是OP所谈论的。通用类型是运行时存在的类型,即原始类型。 Java没有物化的泛化,这与泛化的泛型没有任何关系。在泛化泛型中,参数化类型是泛化类型。在Java中,它们不是。 – newacct

+0

oops明白你的意思。我想我已经混淆了你正在谈论的与泛化的泛型:P –