是java中的Method类的实例是全局唯一的

时间:2015-04-10 05:51:10

标签: java reflection dynamic-proxy

在整个jvm运行生命中,Method类实例总是唯一的吗? 例如, 我有一个实现InvocationHandler的类。 在方法调用中,它具有Method参数。 我知道我可以处理的所有方法,并且我想使用不同的策略来处理不同的方法。所以我构建了一个像Map这样的战略地图。 代码如:

@Override public Object invoke(Object proxy, Method method, Object[] args)  throws Throwable {
    Strategy strategy = strategyMap.get(method);
    Method realMethod = strategy.getCorrespondingMethod();
    return realMethod.invoke(this, args); 
}

问题是,如果我使用此策略,则Method对象必须在整个JVM运行生命周期中是全局唯一的。否则,我找不到正确的策略。

那么,java中Method类的实例是全局唯一的。

问题2: 如何高效的方法:toGenericString(),我使用方法对象无法完成这项工作,我想我可以使用方法泛型字符串。

谢谢。

1 个答案:

答案 0 :(得分:3)

您应该以这种方式看到它 - 对于给定的类,方法实例始终是唯一的。我为给定类添加的原因是因为使用不同类加载器加载的2个相同类将具有相同方法的不同实例。

  

Method的有效性如何:toGenericString()

嗯,效率是一个相对概念。您没有任何可以比较toGenericString()的内容。因此,如果toGenericString()完成工作,那就去做吧,忘掉效率:P