适时选择getDeclaredxxx和getxxx

简介:

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,之后持续递归即可.

 


本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/5626119.html,如需转载请自行联系原作者

相关文章
|
Web App开发 移动开发 小程序
“似水无形” - 小程序化
企业前端人机交互的软件技术载体,曾经是PC软件,然后是网页,再后来是App,之后是小程序形态的轻应用。“小程序化”,也许是物联网时代的趋势?但形态不是最根本的,重要的是“可交互的数字内容”,因为我们使用软件的目的是为了它背后的效用。“似水无形”,在什么设备里它就呈现什么形态。
88 0
幼儿园食品安全舆情工作怎么做?
一直以来食品安全问题就是全民关注的焦点,再加上幼儿园作为这一特殊主体,尤其是近年来有关幼儿园食品安全问题的报道层出不穷,如涉及到的食堂餐具安全问题、食材安全问题、食堂工作人员卫生安全问题等等。
|
程序员 虚拟化 云计算
优秀云大使之中年危机临近的开发者如何寻求出路
中年危机临近,事业第二春即将开启
5123 2
|
新零售 运维 供应链
益丰大药房的数字化“决心”:从组织架构调整做起
过去由业务部门主导、IT部门只负责技术支持的信息化建设路径,在如今企业的数字化转型过程中不再适用,要适应这种变化,企业必须对组织的流程和架构做出调整。
|
安全 调度
国务院办公厅印发通知,进一步精简审批优化服务精准稳妥推进企业复工复产
3月3日,国务院办公厅印发《关于进一步精简审批优化服务精准稳妥推进企业复工复产的通知》
|
区块链 人工智能
区块链有望成遏制财务造假利器,“顺便”抢走500万财会工作机会
A股上市公司财务造假现象屡见不鲜。从今年年中的康美药业到最近爆出的欢瑞世纪,多家公司因财务造假,遭证监会重罚、造成股价暴跌。是否有技术手段可以从源头扼杀财务造假?区块链技术或是一条途径。