报告不代理 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 的新功能