interface A {
}
public class B {
public static void main(String a[]) {
Class c = Class.forName("A");
System.out.println(c.isInterface());//false
Class c1 = A.class;
System.out.println(c1.isInterface());//true
}
}
Run Code Online (Sandbox Code Playgroud)
o/p:false true
期待o/p:真实
我不想知道这两者的区别:Class.forName("A")和A.class非常感谢.
Class.forName()尝试使用默认的类加载器在运行时解析类.它可能会成功,也可能会失败,具体取决于所需的类是否有效以及在类路径中.
该.class运算符将类描述符的编译时间常数.如果引用的类无效并且存在于类路径中,它仍然可以在运行时失败,但是它可以在需要常量表达式的位置使用(例如,在注释值中),并且在重构方面通常更具弹性.请注意,捕获的类描述符取决于编译器的输入和类路径; 使用不同的编译器参数,相同的代码可能最终引用两个不同的类.
在您的用例中,两者都应该解析为同一个类.您的结果是意外的,可能表示A您的类路径中存在另一个类.我怀疑A你在问题中引用的接口实际上位于一个包中,在这种情况下你将错误的描述符传递给forName().名称应该是包限定的.