我发现具有默认 equals 方法的类有不同的 元对象方法的实例。为什么会这样? 乍一看它看起来不是最优的,因为方法对象是不可变的。
class X {}
Method defaultM = Object.class.getMethod("equals", Object.class)
Method xMethod = X.class.getMethod("equals", Object.class)
xMethod != defaultM
xMethod.equals(defaultM)
最佳答案
不幸的是,Method
对象不是不可变的。从 Java 2 开始,Method
扩展了 AccessibleObject
,后者具有 setAccessible(boolean)
方法。
因此,不仅方法具有可变属性,此标志还具有安全影响,不允许共享 Method
对象。
请注意,在幕后,Method
对象确实通过委托(delegate)对象共享它们共同的不可变状态,因此您从 Class.getMethod
获得的只是一个廉价的前端 -由该可变标志和对共享规范方法表示的引用组成的结束对象。
关于java - 为什么方法对象的多个实例用于继承的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37878071/