博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[改善Java代码]适时选择getDeclaredxxx和getxxx
阅读量:6364 次
发布时间:2019-06-23

本文共 1108 字,大约阅读时间需要 3 分钟。

Java的Class类提供了很多的getDeclaredxxx方法和getxxx方法,例如getDeclaredmethod和getMethod成对出现,getDeclaredConstructors和getConstructors也是成对出现.

那这两者有什么区别呢?

1 import java.lang.reflect.Method; 2  3 public class Client { 4     public static void main(String[] args) throws Exception { 5         //方法名称 6         String methodName = "doStuff"; 7         Method m1 = Foo.class.getDeclaredMethod(methodName); 8         System.out.println(m1);//输出:void cn.summerchill.test.Client$Foo.doStuff() 9         Method m2 = Foo.class.getMethod(methodName);10         System.out.println(m2);//抛出异常 Exception in thread "main" java.lang.NoSuchMethodException: cn.summerchill.test.Client$Foo.doStuff()11 12     }13     14     static class Foo {15         void doStuff() {}16     }17 }

上面的异常是说m2变量的getMethod方法没有找到doStuff()方法,因为getMethod()方法获得的是所有public访问级别的方法,包括从父类继承的方法.

而getDeclaredMethod()方法获得的是自身类的所有方法,包括pulbic,private方法等,而且不受限于访问权限.

Java之所以这么处理,是因为反射本意只是正常代码逻辑的一种补充,而不是让正常代码逻辑产生翻天覆地的变化,所以pulbic的属性和方法最容易获取,私有属性和方法也可以获取,但是要限定本类.

如果要获得所有继承自父类的方法,如何实现?

先获得父类,然后使用getDeclaredMethods,之后持续递归即可.

 

转载于:https://www.cnblogs.com/DreamDrive/p/5626119.html

你可能感兴趣的文章
用 JavaScript 实现链表操作 - 11 Alternating Split
查看>>
Laravel优秀扩展包整理
查看>>
日志分析之识别真假蜘蛛与处理办法
查看>>
回顾小程序2018年三足鼎立历程,2019年BAT火力全开
查看>>
太多脚本将会毁掉持续交付
查看>>
一地鸡毛 OR 绝地反击,2019年区块链发展指南
查看>>
C# 8新提案让泛型Attribute成为现实
查看>>
ASP.NET Core:简洁的力量
查看>>
关于AWS的Firecracker,技术人应该知道的十件事
查看>>
卢森堡大学发布RepuCoin系统,可破解区块链51%攻击
查看>>
国内云计算厂商众生相:四大阵营十几家企业生存盘点
查看>>
细说Unicode(一) Unicode初认识
查看>>
Node.js有了新的管理者
查看>>
虚拟研讨会:.NET的未来在哪里?
查看>>
Java 20年:历史与未来
查看>>
彻底理解Javascript中的原型链与继承
查看>>
2017 Vue.js 2快速入门指南
查看>>
REST是新SOAP?
查看>>
腾讯最大规模裁撤中层干部,让贤年轻人
查看>>
美国国会为苹果和FBI举行了听证会
查看>>