前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Method常用方法如下

Method常用方法如下

原创
作者头像
艳艳代码杂货店
修改2021-09-26 09:38:59
4340
修改2021-09-26 09:38:59
举报
文章被收录于专栏:艳艳代码杂货店

Method

返回值

方法说明

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方法。(只获取当前类的方法)

示例代码如下:

代码语言:javascript
复制
@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 "一头黑色秀发";
   }
}

输出内容如下:

代码语言:javascript
复制
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(带包名)。

代码语言:javascript
复制
public interface Type {
    default String getTypeName() {
        return toString();
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Method
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档