Pre*_*raj 1 java generics type-inference terminology type-erasure
类型擦除和类型推断之间有什么区别?它们都是编译时操作吗?
Type Erasure:在编译时进程中删除泛型类型信息.
Box<String>转换为type Box,称为原始类型.Type Inference如何与Erasure类型不同?
在JDK 7之前:
Box<String> box=new Box<String>();
Run Code Online (Sandbox Code Playgroud)
来自JDK 7:
Box<String> box=new Box<>();
Run Code Online (Sandbox Code Playgroud)
我猜上面的例子是Type Inference.是对的吗?
是Type Inference对Type Erasure吗?
它们都满足不同的需求:
类型擦除就像你说的那样,并且是必需的,因为java字节代码不是通用的,因此你需要删除键入.这不是一个可以帮助您编写代码的功能,它只是一个自动编译时间更改,必须让jvm理解您的代码.
另一方面,类型推断是编译器"智能"并且知道您指的是什么类型,即使您实际上没有写它.就像在您的示例中一样,编译器知道Box<>()实际意味着Box<String>()并且允许您继续使用类型安全进行编码,就像您编写的那样Box<String>.这样你就可以编写更简洁的代码,编译器仍然可以理解它.
您可以从中了解到,Java中的泛型实际上主要是编译时的事情,它使您可以更安全地编写代码,并帮助您在编译时而不是运行时查找错误.
| 归档时间: |
|
| 查看次数: |
447 次 |
| 最近记录: |