Java中的注释为什么要创建类类型引用?

时间:2014-04-13 11:17:58

标签: java java-ee

在以下代码中

我正在尝试使用我在另一个文件中创建的注释。我不明白为什么我要编写Class c=test.getClass();因为我已经创建了TEST类的对象,那为什么需要它?我尝试了不使用此Class c=test.getClass();但它显示错误

public static void showAnnotations()
     // Function to show annotation information
     {
         TEST test=new TEST(); // Instantiating Test class
         try
         {
             Class c=test.getClass(); // Getting Class reference
             java.lang.reflect.Method m=c.getMethod("testMethod"); // Getting Method reference
             // Getting Class annotation
             MyAnnotation annotation1=
               (MyAnnotation)c.getAnnotation(MyAnnotation.class);
             // Getting Method annotation
             MyAnnotation annotation2=m.getAnnotation(MyAnnotation.class);
             // Displaying annotation information
             System.out.println("Author of the class: "+annotation1.author());
             // Displaying annotation information
             System.out.println("Date of Writing the class: "+annotation1.date());
             // Displaying annotation information
             System.out.println("Author of the method: "+annotation2.author());
             // Displaying annotation information
             System.out.println("Date of Writing the method: "+annotation2.date());
         }
         catch(NoSuchMethodException ex)
         {
             System.out.println("Invalid Method..."+ex.getMessage());
         }
     }

2 个答案:

答案 0 :(得分:2)

当您致电getClass时,您正在使用code reflection,这意味着您正在使用包含有关该计划本身信息的计划数据。

是的,您有一个由TEST引用的test类的对象。您可以使用其方法或访问其公共属性。也就是说,您有一个TEST类的实例,您使用OOP范例来表示某些信息。

另一方面,您需要一个对程序本身进行建模的对象:表示类的类的实例。 Java提供了有关其他类的类建模信息:Class类。

因此,您需要请求代表您的TEST类的Class实例。那是你的路线:

Class c=test.getClass();

您也可以使用以下行来获取此实例:

Class c=TEST.class;

答案 1 :(得分:1)

使用Class c=test.getClass();您不会创建新对象(或类似的东西),您只需获取用于获取/读取方法/字段/等的runtime class(类本身) 。班上的。

如果您想在运行时知道字段的类(例如获取类的名称),请使用简单的TEST.class执行相同的操作,因为您已经知道需要使用哪个类并使用,你不需要创建它的实例。


  

public final Class getClass()

     

返回此Object的运行时类。   返回的Class对象是被锁定的对象   表示类的静态同步方法。实际上   结果类型是Class,其中| X |是擦除   调用getClass的表达式的静态类型。对于   例如,此代码片段中不需要强制转换:

     

数字n = 0;类c = n.getClass();