没有类型,这有什么作用?
ArrayList l = new ArrayList();
如果你没有指定类型,并且将所有内容都转换为对象,它是否默认为类型对象?
当api表示ClassType(不会显示)小于大于符号的问号时,它意味着什么。
答案 0 :(得分:7)
这称为原始类型。尽可能避免使用原始类型,因为它们会降低类型安全性。
基本上它们是为了向后兼容,因此在引入泛型时,现有代码仍然编译。与以往一样,请参阅Java Generics FAQ了解更多详情。
请注意,使用原始类型不与使用类型参数为Object
的类型相同,因为原始类型具有所有痕迹的泛型从有效的API中删除 - 甚至使用其他类型参数的通用方法。这是使它们变得危险的一部分。
答案 1 :(得分:3)
如果您没有指定类型,并且将所有内容转换为对象,它是否默认为类型对象?
是。那几乎是对的。
未提供类型参数的泛型类型(例如ArrayList
)称为原始类型。原始类型包含在官方路径Type Erasure中:
例如,
Box<String>
被转换为类型Box
,它被称为原始类型 - 原始类型是没有任何类型参数的泛型类或接口名称。这意味着您无法找到泛型类在运行时使用的Object类型。[...]
存在类型擦除,以便新代码可以继续与遗留代码接口。 出于任何其他原因使用原始类型被认为是糟糕的编程习惯,应尽可能避免使用。
*)您可以将Object
添加到ArrayList
,但正如@newacct在评论中指出的那样,ArrayList
不会被视为与}相同em> ArrayList<Object>
,因为ArrayList
(和ArrayList<?>
btw)都是ArrayList<WhatEver>
的超类型,而ArrayList<Object>
则不是。{/ p>
答案 2 :(得分:1)
是
这是Java在引入泛型之前的工作方式。事实上,这是仍然它是如何工作的。编译器执行基本类型检查,然后执行类型擦除,因此您留下的字节码将与上面的字节码相同。
答案 3 :(得分:0)
您将在安装JDK的目录的根目录中找到一个zip文件。在那里,有一个src.zip。
我使用eclipse作为IDE。在那个you can attach the source中,当你按下CTRL + SHIFT + T并输入ArrayList时,你将能够自己看到它的来源;) 实际上,它也是一个很好的方式来看看更专业的ppl如何编写源代码:)