我一直在阅读有关JAVA的内容,我对Class类感到困惑。假设你在这里有这个代码:
class C {}
public class NewClass {
public Class<?> f(Class<?> type){
return type.getClass();
}
public static void main(String[] args) {
NewClass nc = new NewClass();
C c = new C();
System.out.println(nc.f(C.class));
}
}
现在我很惊讶getclass返回java.lang.Class,而我期望它是packagename.C。它怎么没有显示作为Class类的实际类?
另外,当我尝试在f()中传递新的C()时,它不会编译。甚至c(C的参考)也不被接受。为什么会这样?即使它们是同一个类对象/引用?为什么只有C.class,即类文字被接受为Class类型?这真让我困惑。如果有人可以帮忙吗?
提前致谢
答案 0 :(得分:2)
Class对象的Class必须是Class
,否则它不会是Class
object。
你在做什么不是&#34;什么是C&#34;的类,但是&#34;当我呼叫c.getClass()
&#34;时,我得到的对象类是什么? (或C.class
),即Class。
C c = new C(); // c is on Object of type "C" here
Class<?> clz = c.getClass(); // clz is an Object of type "Class C" here.
Class<?> clzClz = clz.getClass(); // clzClzs is always "Class"
这会在已经是getClass()
对象的对象上调用Class
,因此你的get&#34; java.lang.Class&#34;:
public Class<?> f(Class<?> type){ // type IS already a "Class" object
return type.getClass(); // so this will always be "java.lang.Class"
}
您可以将其替换为......
public Class<?> f(Object o){
return o.getClass();
}
......然后会返回&#34; C&#34;上课后。但是,当然,这种方法没有用,因为它只有getClass()
类。
答案 1 :(得分:0)
那是因为您将Class实例传递给f()。你可以看到这样的实际类:
class C {}
public class NewClass {
public Class<?> f(Class<?> type){
return type.getClass();
}
public static void main(String[] args) {
NewClass nc = new NewClass();
C c = new C();
System.out.println(c.getClass());
}
}