类类型返回

时间:2015-08-09 13:03:51

标签: java

我一直在阅读有关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类型?这真让我困惑。如果有人可以帮忙吗?

提前致谢

2 个答案:

答案 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());    
 }
}