package javaapplication20;
import java.lang.annotation.*;
import java.lang.reflect.*;
@Retention (RetentionPolicy.RUNTIME)
@interface MyAnno {
String str();
int yu();
}
@Retention (RetentionPolicy.RUNTIME)
@interface Wasp {
double hg();
}
@MyAnno(str = "Falcon", yu=5 )
@Wasp(hg = 54.67)
public class Main {
@MyAnno(str = "Raptor", yu=7 )
@Wasp(hg = 90.56)
public static void meth(){
Main ob = new Main();
try{
Annotation annon[] = ob.getClass().getAnnotations();
System.out.println("All anotations for Main are ");
for(Annotation a : annon){
System.out.println(a);
}
Method m = ob.getClass().getMethod("meth");
Annotation annons[] = m.getAnnotations();
System.out.println("All Annotations for meth() are ");
for(Annotation a : annons){
System.out.println(a);
}
}catch(NoSuchMethodException e){
System.out.println("No Match Found");
}
}
public static void main(String[] args) {
meth();
}
}
输出:
All anotations for Main are
@javaapplication20.MyAnno(str=Falcon, yu=5)
@javaapplication20.Wasp(hg=54.67)
All Annotations for meth() are
@javaapplication20.MyAnno(str=Raptor, yu=7)
@javaapplication20.Wasp(hg=90.56)
答案 0 :(得分:2)
此答案隐藏在Annotation
接口的javaDoc中。对于toString()
,它说:
返回此批注的字符串表示形式。表示的细节是依赖于实现的,但以下可能被认为是典型的:
@com.acme.util.Name(first=Alfred, middle=E., last=Neuman)
这就是你在输出中看到的。 java编译器将为您的注释创建一个类文件,该类文件将具有生成此输出的toString()
实现。 依赖于实现的是指 java编译器,而不是您的注释实现。
答案 1 :(得分:1)
我认为你的问题是;
@Annotation是否有toString()的默认实现?
答案是肯定的。它还有一个hashCode()和equals()的默认实现。