我有这个注释类型类:
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface RemoteTcpAccess {
public int port();
}
然后像这样将它应用到另一个类上:
@RemoteTcpAccess(port = 444)
public class CalculatorService {
public int Add(int a, int b) {
return a + b;
}
public void DisplayText(String text) {
System.out.println(text);
}
}
现在我获取了 CalculatorService 类对象并尝试获取有关 RemoteTcpAccess 注释的信息:
private static void CheckRemoteTcpAccess(List<Class> classes) {
for (Class class1 : classes) {
for (Annotation annotation : class1.getDeclaredAnnotations()) {
if (AnnotationEquals(annotation, ComponentsProtocol.REMOTE_TCP_ACCESS)) {
//GET INFORMATION
}
}
}
}
private static boolean AnnotationEquals(Annotation classAnnotation, String protocolAnnotation) {
return classAnnotation.toString()
.substring(0, classAnnotation.toString().indexOf("("))
.equals(protocolAnnotation);
}
我能够识别该类是否在其上应用了 RemoteTcpAccess 注释,但我无法获得有关哪些字段具有注释以及哪些值具有这些字段的信息,例如:
字段端口 - 值 444
有什么方法可以通过反射获取这些信息吗?
谢谢
最佳答案
你可以调用:
RemoteTcpAccess rta = clazz.getAnnotation(RemoteTcpAccess.class);
if(rta != null) //annotation present at class level
{
int port = rta.port();
}
在您的情况下,您可以直接使用特定注释 (RemoteTcpAccess
) 而不是使用 Annotation
的通用方式。因此,这会将您的循环缩减为:
for (Class class1 : classes) {
RemoteTcpAccess rta = class1.getAnnotation(RemoteTcpAccess.class);
if(rta != null) {
int port = rta.port(); //GET INFORMATION
..
}
}
关于java - 通过反射获取java注解信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17943143/