这个问题在这里已经有了答案:getDeclaredMethods()behavingdifferentlyinJava7vs.Java8(2个答案)关闭7年前。考虑下一个代码:interfaceA{AsetX(Objectx);AsetY(Objecty);}interfaceBextendsA{BsetX(Objectx);}如果您尝试将B.class.getDeclaredMethods()与jdk8一起使用您将获得下一个方法:公共(public)抽象BB.setX(java.lang.Object)和公共(public)默认AB.setX(java.lang.Object)Jav
根据http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Class.html#getDeclaredMethods%28%29,Class.getDeclaredMethods()应该只包含“由类声明”的方法。但是,我通过下面的测试代码得到了一些非常令人惊讶的结果:importjava.util.Arrays;classA{publicstaticAm1(){returnnull;}publicstaticAm2(){returnnull;}publicstaticAm3(){returnnull;}}classBext
我的代码有一个小问题我有两个类(class)publicclassA{publicAfoo(inta){returnnewA();}}publicclassBextendsA{publicBfoo(intx){returnnewB();}}现在在我的代码中我只想打印在类B中声明的方法这样Bb=newB();Method[]m=b.getClass().getDeclaredMethods();for(inti=0;i为什么输出是foofoo为什么GetDeclaredMethods也在A类中找到foo?我该如何解决?谢谢 最佳答案
如何通过反射找出方法的字符串名称是什么?例如给出:classCar{publicvoidgetFoo(){}}我想获取字符串“getFoo”,如下所示:Car.getFoo.toString()=="getFoo"//TRUE 最佳答案 你可以像这样得到字符串:Car.class.getDeclaredMethods()[0].getName();这是针对您的类中的单个方法的情况。如果要遍历所有声明的方法,则必须遍历Car.class.getDeclaredMethods()返回的数组:for(Methodmethod:Car.cl
如何通过反射找出方法的字符串名称是什么?例如给出:classCar{publicvoidgetFoo(){}}我想获取字符串“getFoo”,如下所示:Car.getFoo.toString()=="getFoo"//TRUE 最佳答案 你可以像这样得到字符串:Car.class.getDeclaredMethods()[0].getName();这是针对您的类中的单个方法的情况。如果要遍历所有声明的方法,则必须遍历Car.class.getDeclaredMethods()返回的数组:for(Methodmethod:Car.cl
我有一个抽象类A,类B是扩展A的具体类。调用B.class.getDeclaredMethods()除了返回类B的方法签名外,还返回类A的方法签名,但JAVA文档在getDeclaredMethods()上说了一些不同的东西"Thisincludespublic,protected,default(package)access,andprivatemethods,butexcludesinheritedmethods."所以从上面的文档我期待从抽象父类继承的方法foo()不应该从getDeclaredMethods()调用返回,但我得到的方法foo()继承自抽象父类从getDeclar
有人可以详细说明一下,并解释这两种方法之间的区别,以及何时/为什么要使用其中一种方法而不是其他方法 最佳答案 getDeclaredMethods包括类本身声明的所有方法,而getMethods只返回公共(public)方法,还返回从基类继承的方法(这里来自java.lang.Object)。在getDeclaredMethod的Javadocs中了解更多信息和getMethods. 关于Java反射:DifferencebetweengetMethods()andgetDeclared