这个问题在这里已经有了答案: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?我该如何解决?谢谢 最佳答案
我正在尝试理解Java反射,但在使用非整数setter方法时遇到了困难。例如,如何解决下面的“getDeclaredMethod()”调用?importjava.lang.reflect.*;classTarget{Stringvalue;publicTarget(){this.value=newString(".");}publicvoidsetValue(Stringvalue){this.value=value;}publicStringgetValue(){returnthis.value;}}classReflectionTest{publicstaticvoidmain(S
我正在尝试理解Java反射,但在使用非整数setter方法时遇到了困难。例如,如何解决下面的“getDeclaredMethod()”调用?importjava.lang.reflect.*;classTarget{Stringvalue;publicTarget(){this.value=newString(".");}publicvoidsetValue(Stringvalue){this.value=value;}publicStringgetValue(){returnthis.value;}}classReflectionTest{publicstaticvoidmain(S
如何通过反射找出方法的字符串名称是什么?例如给出: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
我一直在尝试在Java中使用Reflection,但结果并不理想。这是我的代码:publicclassReflectionTest{publicstaticvoidmain(String[]args){ReflectionTesttest=newReflectionTest();try{Methodm=test.getClass().getDeclaredMethod("Test");m.invoke(test.getClass(),"Coolstorybro");}catch(NoSuchMethodException|SecurityExceptione){//TODOAuto-g
我有一个抽象类A,类B是扩展A的具体类。调用B.class.getDeclaredMethods()除了返回类B的方法签名外,还返回类A的方法签名,但JAVA文档在getDeclaredMethods()上说了一些不同的东西"Thisincludespublic,protected,default(package)access,andprivatemethods,butexcludesinheritedmethods."所以从上面的文档我期待从抽象父类继承的方法foo()不应该从getDeclaredMethods()调用返回,但我得到的方法foo()继承自抽象父类从getDeclar
假设我正在尝试使用Methodm=plugin.getClass().getDeclaredMethod("getFile");从类中获取方法。但是plugin类正在扩展另一个类,即具有getFile方法的类。我不太确定这是否会引发NoSuchMethodException异常。我知道plugin正在扩展的类具有getFile方法。对不起,如果我听起来很困惑,有点累。 最佳答案 听起来你只需要使用getMethod而不是getDeclaredMethod。整点getDeclaredMethod是它只找到在你调用它的类中声明的方法:R