而getDeclaredFields()只能获取自己声明的各种字段,包括public,protected,private。
1、
该方法用于取得指定的实体类的实体名称。如果指定的实体类的实体标签定义了名称,则取该名称,否则取类名。
例如:有实体类SampleEntity
import javax.persistence.Entity; @Entity(name = "SpecialName") public class SampleEntity { }以SampleEntity类作为参数调用entityName方法:
1、方法中第一行,String entityName = entityClass.getSimpleName();
变量entityName的值设为类SampleEntity的短名称,即“SampleEntity”。
2、方法中第二行,Entity entity = entityClass.getAnnotation(Entity.class);
即取得SampleEntity的@Entity标签。
3、方法中第三行到第六行,if(entity.name()!=null&&!"".equals(entity.name()))
{
entityName = entity.name();
}
即@Entity标签中定义了name并且name不是空串时, 变量entityName的值设为@Entity标签中name的值,即“SpecialName”。
4、返回变量entityName,值为“SpecialName”。
如果SampleEntity的@Entity标签没有定义name
import javax.persistence.Entity; @Entity public class SampleEntity { }
方法中第三行,if(entity.name()!=null&&!"".equals(entity.name()))条件不成立,最终方法返回变量entityName,值为“SampleEntity”。
2、Method getMethod(String name, Class<?>... parameterTypes)
--返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。
parameterTypes如:String.class、int.class这些字节码才是Class类的对象
也可以此种方式:
Method method = XXX.getClass().getMethod(methodName,new Class[0]);
//getMethod第一个参数是方法名,第二个参数是该方法的参数类型,
//因为存在同方法名不同参数这种情况,所以只有同时指定方法名和参数类型才能唯一确定一个方法
如一个函数 int Test(int a, String str);
对应的getMethod方法:
1. getMethod("Test",int.class,String.class);
2. getMethod("Test",new Class[]{int.class,String.class});
然后通过invoke来调用此方法:
函数原型:Object java.lang.reflect.Method.invoke(Object receiver, Object... args)
//Method类的invoke(Object obj,Object args[])方法接收的参数必须为对象,
//如果参数为基本类型数据,必须转换为相应的包装类型的对象。invoke()方法的返回值总是对象,
//如果实际被调用的方法的返回类型是基本类型数据,那么invoke()方法会把它转换为相应的包装类型的对象,再将其返回
receiver:该方法所在类的一个对象
args: 传入的参数 如 100,“hello”
相关推荐
Method method = MyClass.class.getMethod("myMethod"); MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation.class); if (myAnnotation != null) { System.out.println("注解值:" + myAnnotation....
- **遍历getter和setter**:`Class.getMethod(String name, Class<?>... parameterTypes)`可用于查找getter和setter方法,从而获取属性信息。 2. **使用注解给Bean的属性添加属性值**: - **定义注解**:在Java中...
MyAnnotation annotation = MyClass.class.getMethod("myMethod").getAnnotation(MyAnnotation.class); System.out.println(annotation.value()); ``` Reflection与Annotation的结合使得代码可以更加灵活和自省。...
最后,我们可以通过遍历`annotation_1`数组来打印所有注解的信息,或者通过`getMethod("test").getAnnotations()`获取`test`方法上的注解。 总的来说,Java注解提供了声明元数据的能力,使得代码更加简洁且易于维护...
在Java编程语言中,反射机制是一种强大的工具,它允许程序在运行时检查和操作类、接口、字段和方法的信息。通过反射,我们可以动态地创建对象、调用方法、访问字段,甚至可以处理私有成员,这为编写更加灵活和通用的...
`AccessibleObject`是`Field`、`Constructor`和`Method`的父接口,它包含`getAnnotation()`方法来获取注解,`isAccessible()`检查成员是否可访问,`setAccessible(boolean accessible)`可以改变成员的访问权限,这...
Method method = clazz.getMethod("doSomething"); MyAnno methodAnno = (MyAnno) method.getAnnotation(MyAnno.class); System.out.println("方法上的MyAnno标注:value=" + methodAnno.value()); ``` 上述...
- 调用方法:Method类代表类的方法,通过getMethod()或getDeclaredMethod()获取,然后调用invoke()方法。 2. **注解(Annotation)**: - 注解是元数据的一种形式,为代码提供了附加信息,这些信息可以被编译器或...
MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation.class); String value = (String) myAnnotation.value(); System.out.println("Value: " + value); ``` 5. **获取方法参数上的注解** 若要...
通过getMethod()和getDeclaredMethod()获取方法后,可以使用invoke()方法动态调用该方法,传入相应的参数。这允许我们在运行时调用未知的方法名或参数类型的方法。 4. **构造器的反射**: - 创建对象:Constructor...
Method method = clazz.getMethod("add", Object.class); method.invoke(obj, "Item"); ``` 这个例子展示了如何调用`ArrayList`的`add`方法,并传入一个参数。 #### 4. 获取注解信息 通过反射,我们还可以获取到...
`Method`类代表了类的方法,通过`getMethods()`或`getMethod(String name, Class<?>... parameterTypes)`可以获取到类中指定的方法。然后使用`invoke(Object obj, Object... args)`方法执行这个方法,这里的`obj`是...
- `getAnnotation(Class<? extends Annotation> annotationClass)`:获取指定类型的注解。 以上8个实例涵盖了Java反射的主要使用场景。在实际开发中,反射通常用于框架、插件系统、动态代理等高级应用,但也需要...
`getAnnotations()`、`isAnnotationPresent(Class<A> annotationClass)`和`getAnnotation(Class<A> annotationClass)`可以帮助我们检查和获取类、方法或字段上的注解信息。 8. **泛型擦除与类型信息**:虽然Java的...
`isAnnotationPresent(Class<? extends Annotation> annotationClass)`检查是否存在某个注解,`getAnnotation(Class<T> annotationClass)`则返回注解实例。 7. **性能与安全问题** 反射虽然强大,但也带来了性能...
`isAnnotationPresent(Class<? extends Annotation> annotationClass)`检查类、方法或字段是否包含指定的注解,`getAnnotation(Class<? extends Annotation> annotationClass)`获取注解实例。 7. **安全性与效率** ...
`getMethod()`和`getDeclaredMethod()`用于获取方法,`invoke()`方法则用于执行该方法,传入所需的参数。 6. **接口与泛型的反射** 反射同样支持接口的处理,可以检查类是否实现了特定接口。对于泛型,虽然在运行...
- 获取类的方法:`Method method = clazz.getMethod("methodName", 参数类型...);` - 调用方法:`method.invoke(obj, 参数...);` - 访问字段:`Field field = clazz.getField("fieldName");` 和 `field.set(obj, ...
MyCustomAnnotation annotation = method.getAnnotation(MyCustomAnnotation.class); if (annotation != null) { System.out.println(annotation.value()); } ``` 4. **处理器和注解处理**: 在编译期间,...