Java 是我对'的理解;类型擦除';对的

Java 是我对'的理解;类型擦除';对的,java,generics,type-erasure,Java,Generics,Type Erasure,经过一些研究,我知道泛型是一种编译时类型检查特性。它们用于确保不使用不正确的类型,之后还将删除参数化的类型信息,以避免运行时不必要的开销。这种在编译时删除参数化类型信息的过程称为类型擦除 我还想澄清泛型实际上是如何确保不使用不兼容类型的。这是通过在编译时插入必要的类型转换来实现的,当遇到无效类型时会导致编译器错误吗?但是类型转换不是用于运行时检查吗?如果是这样,编译器如何在编译时防止无效类型?好的,我应该意识到在编译时自动进行类型转换以防止不兼容类型实际上是隐式的和内部的。所以它不同于我在后面的

经过一些研究,我知道泛型是一种编译时类型检查特性。它们用于确保不使用不正确的类型,之后还将删除参数化的类型信息,以避免运行时不必要的开销。这种在编译时删除参数化类型信息的过程称为类型擦除


我还想澄清泛型实际上是如何确保不使用不兼容类型的。这是通过在编译时插入必要的类型转换来实现的,当遇到无效类型时会导致编译器错误吗?但是类型转换不是用于运行时检查吗?如果是这样,编译器如何在编译时防止无效类型?

好的,我应该意识到在编译时自动进行类型转换以防止不兼容类型实际上是隐式的和内部的。所以它不同于我在后面的问题中提到的类型转换,这是一个运行时检查功能。因此没有冲突。

泛型用于类型检查。例如,如果您有一个方法接收参数
字符串s
,则该方法不允许作为参数
int
整数
对象
接收。泛型只在编译时帮助实现类似的功能。在运行时,所有这些类型都被删除,并被视为
Object
s,这称为类型擦除。这在运行时起作用的事实是,在运行时您知道对象引用的特定类型(就像在编译时一样)。尽管如此,您仍然可以返回并使用原始类型,手动执行向下转换以确保运行时的行为。