0

Java アノテーションを読み始めたところです。checkprime メソッドの上に記述された 3 つの注釈をすべて印刷する必要がありますが、最初の注釈のみを印刷する必要があります。

import java.io.*;
import java.lang.annotation.Annotation;
import java.lang.annotation.Retention;   
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Method;

@Retention(RetentionPolicy.RUNTIME)

@interface MyMarker
  {

  }

@interface MyMarker1
  { 
String author();
  }

@interface MyMarker2
  {
String author();
String module();
double version(); 
  }

public class Ch10Lu1Ex4
{
@MyMarker 
@MyMarker1(author = "Ravi") 
@MyMarker2(author = "Ravi", module = "checkPrime", version = 1.1)
public static void checkprime(int num)
     {
      int i;
      for (i=2; i < num ;i++ )
       {
          int n = num%i;
          if (n==0)
          {
           System.out.println("It is not a prime number");
           break;
          }
      }
          if(i == num)
          {

              System.out.println("It is a prime number");
          }
}


public static void main(String[] args) 
  {
    try
      {
       Ch10Lu1Ex4 obj = new Ch10Lu1Ex4();
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
       System.out.println("Enter a number:");
       int x = Integer.parseInt(br.readLine());
       obj.checkprime(x);
       Method method = obj.getClass().getMethod("checkprime", Integer.TYPE);
       Annotation[] annos = method.getAnnotations();
         for(int i=0;i<annos.length;i++)
          {
            System.out.println(annos[i]);
          }
       }
    catch(Exception e)
    {
        e.printStackTrace();
    }
  }
}
4

2 に答える 2

2

@Retention(RetentionPolicy.RUNTIME)次のように、残りの注釈に追加する必要があります。

@Retention(RetentionPolicy.RUNTIME)
@interface MyMarker
{
}

@Retention(RetentionPolicy.RUNTIME)
@interface MyMarker1
  { 
String author();
  }

@Retention(RetentionPolicy.RUNTIME)
@interface MyMarker2
  {
String author();
String module();
double version(); 
  }

これがないと、コードは実行時に最初の注釈のみを認識し、他の注釈は使用できなくなります。

于 2013-01-03T20:07:18.430 に答える
1

そのうちの1つだけに。の注釈が付けられてい@Retention(RetentionPolicy.RUNTIME)ます。他のものはデフォルトでCLASSポリシーに設定され、VMによって実行時に保持されません。

于 2013-01-03T20:08:06.823 に答える