hashCode()
、equals()
和 toString()
等标准 Object
方法的 InvocationHandler
的实现。
未能处理这些方法可能会在代理实例上调用它们时导致意外问题。
示例:
InvocationHandler myHandler = (proxy, method, params) -> { System.out.println("Hello World!"); return null; }; Runnable myProxy = (Runnable) Proxy.newProxyInstance( Thread.currentThread().getContextClassLoader(), new Class[] {Runnable.class}, myHandler );
此代码段的宗旨是仅代理 Runnable.run()
方法。
但是,也会代理对 hashCode()
等任何 Object
方法的调用。
这可能导致 NullPointerException
等问题,例如在将 myProxy
添加到 HashSet
时。
2020.2 的新功能