`
uule
  • 浏览: 6352323 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

getMethod和getAnnotation

 
阅读更多
getFields()只能获取public的字段,包括父类的。
而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”

分享到:
评论

相关推荐

    java自定义注解和通过反射获取注解

    Method method = MyClass.class.getMethod("myMethod"); MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation.class); if (myAnnotation != null) { System.out.println("注解值:" + myAnnotation....

    Java Bean 遍历和使用注解给Bean的属性添加属性值

    - **遍历getter和setter**:`Class.getMethod(String name, Class&lt;?&gt;... parameterTypes)`可用于查找getter和setter方法,从而获取属性信息。 2. **使用注解给Bean的属性添加属性值**: - **定义注解**:在Java中...

    reflection 详解

    MyAnnotation annotation = MyClass.class.getMethod("myMethod").getAnnotation(MyAnnotation.class); System.out.println(annotation.value()); ``` Reflection与Annotation的结合使得代码可以更加灵活和自省。...

    JDK1.5新特性之注解功能(实例讲解)[文].pdf

    最后,我们可以通过遍历`annotation_1`数组来打印所有注解的信息,或者通过`getMethod("test").getAnnotations()`获取`test`方法上的注解。 总的来说,Java注解提供了声明元数据的能力,使得代码更加简洁且易于维护...

    java 反射机制

    在Java编程语言中,反射机制是一种强大的工具,它允许程序在运行时检查和操作类、接口、字段和方法的信息。通过反射,我们可以动态地创建对象、调用方法、访问字段,甚至可以处理私有成员,这为编写更加灵活和通用的...

    java 的反射机制总结

    `AccessibleObject`是`Field`、`Constructor`和`Method`的父接口,它包含`getAnnotation()`方法来获取注解,`isAccessible()`检查成员是否可访问,`setAccessible(boolean accessible)`可以改变成员的访问权限,这...

    Java软件开发实战 Java基础与案例开发详解 16-5 利用反射获取标注信息 共7页.pdf

    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)**: - 注解是元数据的一种形式,为代码提供了附加信息,这些信息可以被编译器或...

    java 通过反射获取类上注解,方法上注解,注解里的值及方法参数

    MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation.class); String value = (String) myAnnotation.value(); System.out.println("Value: " + value); ``` 5. **获取方法参数上的注解** 若要...

    反射很好的例子,还不错

    通过getMethod()和getDeclaredMethod()获取方法后,可以使用invoke()方法动态调用该方法,传入相应的参数。这允许我们在运行时调用未知的方法名或参数类型的方法。 4. **构造器的反射**: - 创建对象:Constructor...

    注解+ 反射实例demo

    Method method = clazz.getMethod("add", Object.class); method.invoke(obj, "Item"); ``` 这个例子展示了如何调用`ArrayList`的`add`方法,并传入一个参数。 #### 4. 获取注解信息 通过反射,我们还可以获取到...

    北大青鸟java反射机制

    `Method`类代表了类的方法,通过`getMethods()`或`getMethod(String name, Class&lt;?&gt;... parameterTypes)`可以获取到类中指定的方法。然后使用`invoke(Object obj, Object... args)`方法执行这个方法,这里的`obj`是...

    Java 8个反射实例

    - `getAnnotation(Class&lt;? extends Annotation&gt; annotationClass)`:获取指定类型的注解。 以上8个实例涵盖了Java反射的主要使用场景。在实际开发中,反射通常用于框架、插件系统、动态代理等高级应用,但也需要...

    java反射机制原理1

    `getAnnotations()`、`isAnnotationPresent(Class&lt;A&gt; annotationClass)`和`getAnnotation(Class&lt;A&gt; annotationClass)`可以帮助我们检查和获取类、方法或字段上的注解信息。 8. **泛型擦除与类型信息**:虽然Java的...

    Reflect.rar

    `isAnnotationPresent(Class&lt;? extends Annotation&gt; annotationClass)`检查是否存在某个注解,`getAnnotation(Class&lt;T&gt; annotationClass)`则返回注解实例。 7. **性能与安全问题** 反射虽然强大,但也带来了性能...

    Java反射实例

    `isAnnotationPresent(Class&lt;? extends Annotation&gt; annotationClass)`检查类、方法或字段是否包含指定的注解,`getAnnotation(Class&lt;? extends Annotation&gt; annotationClass)`获取注解实例。 7. **安全性与效率** ...

    Java反射机制详解

    `getMethod()`和`getDeclaredMethod()`用于获取方法,`invoke()`方法则用于执行该方法,传入所需的参数。 6. **接口与泛型的反射** 反射同样支持接口的处理,可以检查类是否实现了特定接口。对于泛型,虽然在运行...

    JAVA简单的反射案例

    - 获取类的方法:`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. **处理器和注解处理**: 在编译期间,...

Global site tag (gtag.js) - Google Analytics