【发布时间】:2019-04-24 18:43:28
【问题描述】:
我的作业中有一个看起来像这样的问题。
以下哪个过程仅在 Java 编译期间发生?
(i) 类型推断——推断未指定类型的变量的类型。
(ii) 类型擦除——用 Object 或其绑定替换泛型的类型参数。
(iii) 类型检查——检查值是否与分配给它的变量的类型匹配。
A.仅 (i)
B. 仅 (i) 和 (ii)
C. 仅 (i) 和 (iii)
D. 仅 (ii) 和 (iii)
E. (i)、(ii) 和 (iii)
据我了解,Java 仅在编译期间对泛型进行类型检查,因此 (i) 和 (ii) 绝对正确。但是,我不确定类型检查,从提供的描述来看,类型检查似乎不仅限于泛型,还包括其他方面。
这个问题的答案是B,但没有给出解释。我当时想知道,类型检查什么时候发生?如果它不仅发生在编译时,它是在编译时和运行时都发生,还是仅在运行时发生,为什么?
【问题讨论】:
-
类型检查发生在运行时和编译时。问的问题 ONLY 在编译时发生。类型检查两者兼而有之。
-
@markspace 你能举一个在运行时进行类型检查的例子吗?
-
@Code-Apprentice 一个例子可以是转换为子类型时
标签: java generics type-inference type-erasure typechecking