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 最新变化