Ran*_*Tan 6 java generics type-inference typechecking type-erasure
我的作业中有一个这样的问题。
以下哪个过程仅在Java编译期间发生?
(i)类型推断–推断未指定类型的变量的类型。
(ii)类型擦除–用Object或其边界替换泛型的类型参数。
(iii)类型检查–检查该值是否与为其分配的变量的类型匹配。
A.仅(i)
B.仅(i)和(ii)
C.仅(i)和(iii)
D.仅(ii)和(iii)
E.(i),(ii)和(iii)
据我了解,Java仅在编译时对泛型进行类型检查,因此(i)和(ii)绝对正确。但是,我不确定类型检查,从提供的描述来看,类型检查似乎并不限于泛型,还包括其他方面。
这个问题的解决方案是B,但是没有给出解释。我当时在想,什么时候进行类型检查?如果它不仅在编译时发生,还是在编译时和运行时都发生,还是仅在运行时发生,为什么?
它也会在运行时发生,因为您可以将对象转换为其子类型。您可以手动强制它在任何时候使用instanceof再次进行类型检查。
您会看到 Java 不是一种完全静态类型的语言。每当您将对象从类型转换为子类型时,JVM 都会执行动态(运行时)类型检查以检查该对象是否确实是该子类型的实例。使用 instanceof 是动态类型检查的另一个例子。
从这个答案
归档时间: |
|
查看次数: |
258 次 |
最近记录: |