java-反射-Method类走读
背景
之前走读了Class类的函数,能让我们更灵活的获取一个类中的信息。然而仅有类信息还是不够的,想要达到灵活调用类中函数的功能还需要借助于reflect包的Method类,本博文将走读Method类的主要方法。
代码+实战结果
Main.java
public class Main {public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {// 获取本类所有的方法Method[] methods = Main.class.getDeclaredMethods();for (Method method : methods) {// public static void com.ztjy.Main.main(java.lang.String[]) throws java.lang.NoSuchMethodException// public void com.ztjy.Main.demoTest(java.lang.Integer,java.lang.String) throws java.lang.ExceptionSystem.out.println(method);}// 2System.out.println(methods.length);// 获取Method方法对象Method method = Main.class.getMethod("demoTest", Integer.class, String.class);// demoTestSystem.out.println(method.getName());// 获取方法注解(如果没有的话则返回null)// @com.ztjy.DemoAnnotation(value=123)System.out.println(method.getAnnotation(DemoAnnotation.class));// void (包含了泛型)System.out.println(method.getGenericReturnType());// voidSystem.out.println(method.getReturnType());// sun.reflect.annotation.AnnotatedTypeFactory$AnnotatedTypeBaseImpl@1376c05c 还不太清楚这个东西System.out.println(method.getAnnotatedReceiverType());// sun.reflect.annotation.AnnotatedTypeFactory$AnnotatedTypeBaseImpl@51521cc1 还不太清楚这个东西System.out.println(method.getAnnotatedReturnType());// void 还不太清楚这个东西System.out.println(method.getAnnotatedReturnType().getType());// @com.ztjy.DemoAnnotation(value=123)for (Annotation annotation : method.getDeclaredAnnotations()) {System.out.println(annotation);}// class com.ztjy.MainSystem.out.println(method.getDeclaringClass());// my-defaultValue,这可以获取注解中函数的默认值System.out.println(DemoAnnotation.class.getMethod("value").getDefaultValue());// class java.lang.Exceptionfor (Class<?> exceptionType : method.getExceptionTypes()) {System.out.println(exceptionType);}// class java.lang.Exceptionfor (Type genericExceptionType : method.getGenericExceptionTypes()) {System.out.println(genericExceptionType);}// class java.lang.Integer// class java.lang.Stringfor (Type genericParameterType : method.getGenericParameterTypes()) {System.out.println(genericParameterType);}// trueSystem.out.println(method.getModifiers() == Modifier.PUBLIC);// 获取参数的注解// @javax.validation.constraints.NotNull(message={javax.validation.constraints.NotNull.message}, groups=[], payload=[])for (Annotation[] parameterAnnotation : method.getParameterAnnotations()) {for (Annotation annotation : parameterAnnotation) {System.out.println(annotation);}}// 2System.out.println(method.getParameterCount());// class java.lang.Integer// class java.lang.Stringfor (Class<?> parameterType : method.getParameterTypes()) {System.out.println(parameterType);}// java.lang.Integer arg0// java.lang.String arg1for (Parameter parameter : method.getParameters()) {System.out.println(parameter);}// 参考 https://www.zhihu.com/question/54895701System.out.println(method.isBridge());// 参考 https://blog.csdn.net/u010003835/article/details/76850242,default关键字只能在接口中使用,具体参考博文System.out.println(method.isDefault());// 没太明白。。。。参考:https://blog.csdn.net/feier7501/article/details/19088361System.out.println(method.isSynthetic());// false,可变参数System.out.println(method.isVarArgs());// 权限是否可访问,falseSystem.out.println(method.isAccessible());// trueSystem.out.println(method.isAnnotationPresent(DemoAnnotation.class));// 1123method.invoke(Main.class.newInstance(), 1, "123");}@DemoAnnotation(value = "123")public void demoTest(@NotNull Integer integer, String string) throws Exception {System.out.println(integer + string);}
}
DemoAnnotation.java
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface DemoAnnotation {String value() default "my-defaultValue";
}
运行结果如下:
java-反射-Method类走读相关推荐
- 利用java反射调用类的的私有方法
http://blog.csdn.net/sunyujia/article/details/2501709 今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为在反射看来根 ...
- 利用java反射调用类的的私有方法--转
原文:http://blog.csdn.net/woshinia/article/details/11766567 1,今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为 ...
- java 反射 本类_Java 反射 Class类
Java 反射 Class类 @author ixenos 摘要:Class类在反射中的地位.构造Class对象的三种方式.Class对象构造对应类型对象的三种方式 Class类在反射中的地位 位于j ...
- java反射 Method
java反射 Method 获取字节码文件对象 Class c = Class.forName("fieldtest.Student"); 通过无参构造方法创建对象obj Cons ...
- Java反射 Constructor类
Java反射 Constructor类 Java通过反射可以获取构造方法,和使用构造方法创造对象. 在网上找了一个比较好理解的例子来弄清楚Constructor类. public Constructo ...
- java反射 数组类,乐字节Java反射之三:方法、数组、类加载器和类的生命周期
继续讲述Java反射之三:方法.数组.类加载器 一.方法 获取所有方法(包括父类或接口),使用Method即可. public static void test() throwsException { ...
- Java反射 Class类
Class类的实例表示正在运行的Java应用程序中的类和接口.它是Java反射的基础,对任何一个类,首先产生一个Class对象,然后才通过class类获得其他的信息. 获取class类对象方式: 通过 ...
- Java 反射取类中类_Java反射机制(二):通过反射取得类的结构
在反射运用过程中,如果你想得到一个类的完整结构,那么就要使用到java.lang.reflect包中的几个类: · Constructor 表示类中的构造方法 · Field 表示类中的属性 · ...
- Java反射获取类,方法
获取Class类的实例 若已知具体的类,通过类的class属性获取,该方法最为安全可靠,程序性能最高. Class clazz = Person.class; 已知某个类的实例,调用该实例的getCl ...
- Cathy学习Java——反射和类的加载
工厂设计模式 工厂方法模式 概述 工厂:就是生产特点产品的 实现方式 1>创建一个抽象工厂类,声明抽象方法 2>写一个具体抽象工厂类的子类,由子类负责对象的创建 优点:后期容易维护,增强了 ...
最新文章
- 学习官方示例 - SysUtils.EncodeDate、EncodeTime、StrToDate、StrToTime、StrToDateTime
- python快速入门神器 知乎_python数据分析之数据处理终极神器
- nginx 漏洞(适用于0.1.0-0.8.14)补丁
- 这个为生信学习打造的开源Bash教程真香!!(目录更新)!
- JavaScript 错误 - Throw、Try 和 Catch
- kubernetes视频教程笔记 (22)-存储-Secret
- 信号与系统公式笔记(8)——拉普拉斯变换
- 计算机通过华为手机上网,华为手机usb共享电脑的网络怎么办
- 荣耀笔记本linux版硬盘分区,荣耀MagicBook硬盘分区详细教程
- html的method属性,HTML中的form标签的method属性怎么用?这里有method属性的用法介绍...
- 机器学习实验——分类学习算法
- 我的翻译--针对Outernet卫星信号的逆向工程
- Python判断素数(质数)——循换结构、控制及else循环扩展模式的实践
- vue使用高德地图并且绘制多边形
- netlogon启动后停止_【通告更新】漏洞EXP已流出,影响巨大,微软NetLogon权限提升漏洞安全风险通告第三次更新...
- 前端获取QQ音乐(mp3+m4a)
- NR/5G - PUSCH repetition次数
- python自动化测试selenium(四)切换页面、切换窗口
- java对象——new对象的理解
- iPhone 4S版本查看
热门文章
- 【培训】渔网模式识别项目-算法培训-王博士
- 【Spire.PDF】Spire.PDF破解
- 十句冥思話--人生感悟
- ipad mini2显示无服务器,iPad Mini 2维修成本剖析 _苹果 iPad mini 2_平板电脑评测-中关村在线...
- Hyperledger -超级账本 学习报告
- 公子世无双,代码永流传!!!我与github。
- 中国楼市房贷真相:只有傻瓜才自掏腰包!
- OpenGL播放yuv数据流(着色器SHADER)-IOS(一)
- 12 Steps to Better Code【改善代码的12步】
- 1w存银行一年多少利息_五百万存银行 一年利息有多少呢?