返回值 | 方法说明 |
---|---|
Method | getMethod(String name, Class<?>... parameterTypes)返回一个 Method 对象,它反映此 Class 对象所表示的类的public方法。(可以获取父类的方法) |
Method[] | getMethods()返回所有 Method 对象,它反映此 Class 对象所表示的类的public方法。(可以获取父类的方法) |
Method | getDeclaredMethod(String name, Class<?>... parameterTypes)返回一个 Method 对象,该对象反映此 Class 对象所表示的类的public/private方法。(只获取当前类的方法) |
Method[] | getDeclaredMethods()返回所有 Method 对象,它反映此 Class 对象所表示的类的public/private方法。(只获取当前类的方法) |
示例代码如下:
@Slf4j
public class Test {
public static void main(String[] args) throws Exception {
Class<Man> manClass = Man.class;
Man man = manClass.newInstance();
Method getHairColor = manClass.getMethod("getHairColor");
Method getHairColor1 = manClass.getDeclaredMethod("getHairColor");
// 如果方法为private,则可以设置访问权限为true,即可newInstance
getHairColor1.setAccessible(true);
log.info(getHairColor.invoke(man).toString());
log.info(getHairColor1.invoke(man).toString());
// 可以调用到父类方法
Method isAdmin = manClass.getMethod("isAdmin", String.class);
log.info(isAdmin.invoke(man, "admin").toString());
// 获取不到父类方法
Method isAdmin1 = manClass.getDeclaredMethod("isAdmin", String.class);
log.info(isAdmin1.invoke(man, "admin").toString());
}
}
class Man extends User {
public String getHairColor() {
return "一头黑色秀发";
}
}
输出内容如下:
16:30:49.809 [main] INFO com.ldx.test.Test - 一头黑色秀发
16:30:49.818 [main] INFO com.ldx.test.Test - 一头黑色秀发
16:30:49.818 [main] INFO com.ldx.test.Test - true
Exception in thread "main" java.lang.NoSuchMethodException: com.ldx.test.Man.isAdmin(java.lang.String)
at java.lang.Class.getDeclaredMethod(Class.java:2130)
at com.ldx.test.Test.main(Test.java:31)
Method类除了有上面的invoke
方法,常用方法还有如下:
返回值 | 方法说明 |
---|---|
<T extends Annotation>T | getAnnotation(Class<T> annotationClass)如果存在该元素的指定类型的注解,则返回这些注释,否则返回 null。 |
Annotation[] | getDeclaredAnnotations()返回直接存在于此元素上的所有注解。 |
Class<?> | getDeclaringClass()返回表示声明由此 Method 对象表示的方法的类或接口的 Class 对象。 |
Type[] | getGenericParameterTypes()按照声明顺序返回 Type 对象的数组,这些对象描述了此 Method 对象所表示的方法的形参类型的。 |
Type | getGenericReturnType()返回表示由此 Method 对象所表示方法的正式返回类型的 Type 对象。 |
int | getModifiers()以整数形式返回此 Method 对象所表示方法的 Java 语言修饰符。 |
String | getName()以 String 形式返回此 Method 对象表示的方法名称。 |
Annotation[][] | getParameterAnnotations()返回表示按照声明顺序对此 Method 对象所表示方法的形参进行注解的那个数组的数组。 |
Class<?>[] | getParameterTypes()按照声明顺序返回 Class 对象的数组,这些对象描述了此 Method 对象所表示的方法的形参类型。 |
Class<?> | getReturnType()返回一个 Class 对象,该对象描述了此 Method 对象所表示的方法的正式返回类型。 |
Object | invoke(Object obj, Object... args)对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。 |
boolean | isVarArgs()如果将此方法声明为带有可变数量的参数,则返回 true;否则,返回 false。 |
String | toGenericString()返回描述此 Method 的字符串,包括类型参数。 |
void | setAccessible(boolean flag)将此对象的 accessible 标志设置为指示的布尔值,即设置其可访问性。 |
其中:getReturnType/getGenericReturnType
都是获取Method对象表示的方法的返回类型,只不过前者返回的Class类型后者返回的Type,Type就是一个接口而已,在Java8中新增一个默认的方法实现,返回的就参数类型信息。getParameterTypes/getGenericParameterTypes
亦是如此。
其返回结果和Class.getTypeName()
放回结果相同,就是输出返回值的类的name
(带包名)。
public interface Type {
default String getTypeName() {
return toString();
}
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。