这是什么工作,没有类型?Java和泛型类
ArrayList l = new ArrayList();
难道它只是默认为object类型,如果你不指定类型,并投下一切反对呢?
在api中,它说ClassType(不会显示)小于大于符号的问号是什么意思。
这是什么工作,没有类型?Java和泛型类
ArrayList l = new ArrayList();
难道它只是默认为object类型,如果你不指定类型,并投下一切反对呢?
在api中,它说ClassType(不会显示)小于大于符号的问号是什么意思。
如果您不指定类型并且将所有对象都转换为对象,是否仅仅是默认的类型对象?
是的。这几乎是正确的。
未提供类型参数的通用类型(如ArrayList
)称为原始类型。原始类型涵盖在官方线索Type Erasure:
例如,
Box<String>
被转换成键入Box
,这就是所谓的原料种类 - 原始类型是一个泛型类或接口的名称没有任何类型的参数。这意味着您无法找到泛型类在运行时使用的对象类型。[...]
类型擦除的存在使得新的代码可能会继续与遗留代码的接口。 由于任何其他原因使用原始类型被认为是不好的编程习惯,应尽可能避免。
*)你可以把任何Object
到ArrayList
,但@newacct在评论中指出,ArrayList
是不被认为一样ArrayList<Object>
,因为ArrayList
(和ArrayList<?>
BTW)是两个超类型的ArrayList<WhatEver>
,而ArrayList<Object>
不是。
在api中它意味着什么说有一个问号作为一个泛型? – rubixibuc 2011-04-07 08:03:03
'ArrayList >'是'ArrayList
当我使用Class.forName(“Class”)时,它应该返回一个具有指定泛型类的类Class??<(反过来它们不能让它们显示)。但是看起来evetyone只是使用class。这是一回事吗? – rubixibuc 2011-04-07 08:08:03
这就是所谓的原始类型。尽可能避免原始类型,因为它们会降低类型安全性。
基本上他们是为了向后兼容,所以当泛型被引入时,现有的代码仍然被编译。与以往一样,请参阅Java Generics FAQ了解更多详情。
注意,使用原始类型是不一样使用与Object
一个类型参数类型,作为原始类型有所有痕迹从他们有效的API中删除仿制药的 - 使用其他甚至泛型方法类型参数。这是什么使他们危险的一部分。
+1:我从来没有想过用原始类型的通用方法进行处理......好提示 – 2011-04-07 08:04:13
是的。
这就是Java在泛型引入之前的工作方式。而实际上,这是还是它是如何工作的,引擎盖下。编译器执行基本的类型检查,然后执行类型擦除,所以您留下的字节码将与上述相同。
+1指出泛型是在编译时执行的,而不是运行时 – CodeClimber 2011-04-07 08:39:20
您会在安装JDK的目录的根目录中找到一个zip文件。在那里,有一个src.zip。
我使用eclipse作为IDE。在那you can attach the source所以当你推CTRL + SHIFT + T并键入ArrayList时,你将能够看到它自己的来源;) 实际上它也是一个很好的方式来看看更多专家的ppl写源代码:)
我认为它默认是键入'Object',Java中的每一个类都继承它。 – bdares 2011-04-07 07:58:36
@bdares:不,ArrayList与ArrayList