![]() |
1
707
什么是生的?Java语言规范定义了 原始类型 具体如下: JLS 4.8 Raw Types
下面是一个示例:
在这里,
生的有什么特别的?本质上,原始类型的行为与引入泛型之前一样。也就是说,以下内容在编译时是完全合法的。
上面的代码运行得很好,但是假设您还拥有以下代码:
现在我们在运行时遇到麻烦,因为
如果你想的话
当然,如果你
做
希望
另见
原始类型与使用
|
![]() |
2
58
原始类型是Java语言的古老历史。开始的时候
虽然这在大多数情况下都起作用,但确实发生了错误
旧的无类型集合无法强制执行类型安全,因此程序员必须记住他在集合中存储的内容。
供比较:
比较复杂的界面:
注意,不可能实现
编译器的作用: 泛型是向后兼容的,它们使用与原始类型相同的java类。魔法主要发生在编译时。
将编译为:
如果直接使用原始类型,这与编写代码相同。我想我不知道会发生什么
原始类型的替代品是什么:使用 generics |
![]() |
3
26
原始类型是没有任何类型参数的泛型类或接口的名称。例如,给定泛型Box类:
创建参数化类型
如果省略了实际类型参数,则创建
因此,
原始类型出现在遗留代码中,因为许多API类(比如Collections类)在JDK 5.0之前不是泛型的。当使用原始类型时,基本上会得到预泛型行为
但是,如果将原始类型分配给参数化类型,则会收到警告:
如果使用原始类型调用相应泛型类型中定义的泛型方法,也会收到警告:
警告显示原始类型绕过泛型类型检查,将不安全代码的捕获推迟到运行时。因此,应该避免使用原始类型。 类型擦除部分有更多关于Java编译器如何使用原始类型的信息。 未选中的错误消息如前所述,当将遗留代码与泛型代码混合时,可能会遇到与以下类似的警告消息:
当使用对原始类型进行操作的旧API时,可能会发生这种情况,如下例所示:
术语“unchecked”表示编译器没有足够的类型信息来执行确保类型安全所必需的所有类型检查。默认情况下,“unchecked”警告是禁用的,尽管编译器会给出提示。要查看所有“unchecked”警告,请使用-Xlint:unchecked重新编译。 使用-Xlint:unchecked重新编译前面的示例将显示以下附加信息:
要完全禁用未选中的警告,请使用-Xlint:-unchecked标志。这个
原始来源: Java Tutorials |
![]() |
4
19
您应该指定类型参数。 警告建议定义为支持的类型 generics 应该参数化,而不是使用它们的原始形式。
|
![]() |
5
16
Java中的“raw”类型是一个非泛型的类,它处理“raw”对象,而不是类型安全的泛型类型参数。 例如,在Java泛型可用之前,您将使用如下集合类:
当您将对象添加到列表中时,它不关心它是什么类型的对象,当您从列表中获取它时,您必须显式地将它转换为所需的类型。 使用泛型,可以删除“未知”因素,因为必须显式指定列表中可以进入的对象类型:
注意,对于泛型,您不必强制转换来自get调用的对象,该集合是预定义的,仅用于MyObject。这正是泛型的主要驱动因素。它将运行时错误的源更改为可以在编译时检查的内容。 |
![]() |
6
12
什么是原始类型?为什么我经常听到不应该在新代码中使用它们?
“原始类型”是使用泛型类而不为其参数化类型指定类型参数,例如使用
“原始类型”用于向后兼容。不建议在新代码中使用它们,因为使用带有类型参数的泛型类可以实现更强的类型化,这反过来可能提高代码的可理解性,并导致更早地发现潜在问题。 如果我们不能使用原始类型,那么还有什么选择呢?怎样才能更好呢?
首选的替代方法是按预期使用泛型类-使用适当的类型参数(例如。
例如,对于程序员希望确保名为“names”的列表变量只包含字符串的方法:
|
![]() |
7
12
编译器希望您编写:
否则,你可以添加任何你喜欢的类型
|
![]() |
8
12
在这里,我正在考虑多个案例,通过这些案例你可以澄清这个概念
案例1
这是一个严格的
案例2
在这种情况下
在这里
案例3
在这种情况下
它将向其中添加任何类型的对象,因为
|
![]() |
9
8
一个 未经加工的 -类型是缺少 类型参数 使用泛型类型时。
不应使用原始类型,因为它可能导致运行时错误,如插入
当从
用一个
类型参数
添加到您的
|
![]() |
10
6
这是另一个生吃的例子:
正如接受的答案中提到的,您将失去对原始类型代码中泛型的所有支持。每个类型参数都转换为其擦除(在上面的示例中
|
![]() |
11
5
你的意思是
一般来说,参数化集合是一个更好的主意,这样您就不会有转换问题,您将只能添加参数化类型的元素,并且您的编辑器将为您提供适当的方法来选择。
|
![]() |
12
4
原始类型是没有任何类型参数的泛型类或接口的名称。例如,给定泛型Box类:
要创建Box的参数化类型,请为形式类型参数T提供实际类型参数:
如果省略了实际类型参数,则创建一个原始类型的框:
|
![]() |
13
1
我做了一些简单的练习后发现了这一页。 我从示例提供的代码开始===============
对于本代码========================
=============================================================================== 这可能更安全,但花了4个小时来掩饰这一理念。。。 |
![]() |
14
1
避免原始类型
例如 ,
列表是原始类型,而
当在JDK1.5中引入泛型时,保留原始类型只是为了保持与旧版本Java的向后兼容性。尽管使用原始类型仍然是可能的, 他们应该避免 :
供参考 : https://docs.oracle.com/javase/tutorial/java/generics/rawTypes.html |
![]() |
15
0
原始类型在表达您想要表达的内容时很好。
例如,反序列化函数可能返回
|
|
user29759326 · 如何返回递归函数中的最后一个值? 3 月前 |
|
malife89 · 将java中的字符串读取为正确的日期格式 3 月前 |
![]() |
Tim · 在java中,有没有更快的方法将字节数组写入文件? 3 月前 |
![]() |
rudraraj · java中未声明最终变量 4 月前 |
![]() |
Bala Ji · 以下BFS的实施效率如何? 4 月前 |