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