关于java中利用反射获取注解对象为enum的问题 弄两天了 谁有办法?
定义注解AnnotationTest2:
package com.anotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationTest2
{
String value();
public a2 v2();
}
enum a2
{
when,where,what;
}
定义类和方法Test2并且使用上面定义的注解:
package com.anotation;
public class Test2
{
@AnnotationTest2(value = "hello",v2 = a2.what)
public void method1()
{
System.out.println("method1");
}
public static void main(String[] args)
{
Test2 test = new Test2();
test.method1();
}
}
定义反射MyReflection获取注解:
package com.anotation;
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Method;
import java.lang.Exception;
public class MyReflection
{
public static void main(String[] args) throws Exception
{
Test2 test = new Test2();
Class<Test2> classType = Test2.class;
Method method = classType.getMethod("method1", new Class[]{});
method.setAccessible(true);
if(method.isAnnotationPresent(AnnotationTest2.class))
{
method.invoke(test, new Object[]{});
AnnotationTest2 annotation = method.getAnnotation(AnnotationTest2.class);
String hello = annotation.value();
a2 what = annotation.v2().what;
System.out.println(hello + what);
}
}
}
下面是遇到的问题,高手指教!
method1
Exception in thread "main" java.lang.IllegalAccessError: tried to access class com.anotation.a2 from class com.sun.proxy.$Proxy1
at com.sun.proxy.$Proxy1.v2(Unknown Source)
at com.anotation.MyReflection.main(MyReflection.java:23)
package com.anotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationTest2
{
String value();
public a2 v2();
}
enum a2
{
when,where,what;
}
定义类和方法Test2并且使用上面定义的注解:
package com.anotation;
public class Test2
{
@AnnotationTest2(value = "hello",v2 = a2.what)
public void method1()
{
System.out.println("method1");
}
public static void main(String[] args)
{
Test2 test = new Test2();
test.method1();
}
}
定义反射MyReflection获取注解:
package com.anotation;
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Method;
import java.lang.Exception;
public class MyReflection
{
public static void main(String[] args) throws Exception
{
Test2 test = new Test2();
Class<Test2> classType = Test2.class;
Method method = classType.getMethod("method1", new Class[]{});
method.setAccessible(true);
if(method.isAnnotationPresent(AnnotationTest2.class))
{
method.invoke(test, new Object[]{});
AnnotationTest2 annotation = method.getAnnotation(AnnotationTest2.class);
String hello = annotation.value();
a2 what = annotation.v2().what;
System.out.println(hello + what);
}
}
}
下面是遇到的问题,高手指教!
method1
Exception in thread "main" java.lang.IllegalAccessError: tried to access class com.anotation.a2 from class com.sun.proxy.$Proxy1
at com.sun.proxy.$Proxy1.v2(Unknown Source)
at com.anotation.MyReflection.main(MyReflection.java:23)
...全文
相关推荐
java 通过反射获取类上注解,方法上注解,注解里的值及方法参数
java 通过反射获取类上注解,方法上注解,注解里的值及方法参数,项目为maven项目。导入时记得选择maven项目
Java自定义注解使用反射获取字段注解
简单demo,导入即可运行。
通过Java反射机制获取JavaBean对象
1.通过Java反射机制获取JavaBean对象。 2.通过JavaBean全路径字符串获取JavaBean对象。 3.获取JavaBean注解信息
Java利用反射如何查找使用指定注解的类详解
主要给大家介绍了关于Java利用反射如何查找使用指定注解的类的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
java自定义注解和通过反射获取注解
自定义注解和通过反射获取注解


Java SE

