当使用反射来获取一些具体类的方法时-即使我没有显式定义该类的任何方法-默认超类(Object)方法(wait, equals, toString等…)被返回,而其他只能通过反射访问的方法(getSimpleName, isAnnotation, isSynthetic等…)则不能。
为什么会这样?
是只能通过反射访问的方法从输出中任意解析,还是在幕后发生了更有趣的事情?
如何将此原则应用到我自己的具体类中,以便getMethods()只返回我在类中显式定义的方法(或任意选择,但这似乎非常高级),而不是继承自class的默认方法?
No。所有引用类型的超类是Object
。方法wait(..)
, equals(..)
, toString()
在这里定义,这些是你得到的。
您列出的其他方法来自类Class
,它是所有反射操作的入口点。
我如何将这个原则应用到我自己的具体类中,以便getMethods()只返回我在类中显式定义的方法(或任意选择,但这似乎非常高级)而不是从类继承的默认方法?
你不能用getMethods()
。但是,您可以使用getDeclaredMethods()
来只获取在与调用Class
对象对应的类中声明的那些方法。
返回一个数组,其中包含反映所有声明的Method对象由这个类对象表示的类或接口的方法,包括公共、受保护、默认(包)访问和私有访问