我相信我的问题没有意义,但这是因为我不知道我在看什么或如何描述它...
下面的代码编译得很好,但它不应该因为int不是同一类型Integer.这不应该给编译器错误吗?如果编译器期望Class<Integer>在运行时的类型如何解决Class<int>?这是编译器让它继续使用原语的一些魔力吗?如果编译器放松对原语的验证,则不会导致方法编写者期望类型为EXACT类型Class<Integer>而是传递的错误Class<int>.
简而言之,为什么这会在运行时编译并生成(correct或wrong取决于透视图)结果.
public static void main(String[] args) {
printClass("int ", int.class);
printClass("Integer ", Integer.class);
System.out.printf("AreEqual", int.class == Integer.class);
}
private static void printClass(String text, final Class<Integer> klazz) {
System.out.printf("%s: %s%s", text, klazz, "\n");
}
Run Code Online (Sandbox Code Playgroud)
输出:
int : int
Integer : class java.lang.Integer
AreEqual: false
Run Code Online (Sandbox Code Playgroud)
对于控制组,此代码NOT COMPILE按照我的预期进行
public static void main(String[] args) {
printClass("Person ", Person.class);
printClass("Employee", Employee.class);
System.out.printf("AreEqual: %s", Person.class == …Run Code Online (Sandbox Code Playgroud) 我遇到了这段代码
@Override
public @NotNull Class<?> getProviderClass() {
return this.getClass();
}
Run Code Online (Sandbox Code Playgroud)
我想知道它是否如下面的代码:
@Override
@NotNull
public Class<?> getProviderClass() {
return this.getClass();
}
Run Code Online (Sandbox Code Playgroud)
注意:@NotNull注释位于相对于accessModifier的不同位置
在这种情况下还是在方法上返回类型的注释?