@Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if ("hashCode".equals(method.getName())) { return hashCode(); } else if ("equals".equals(method.getName())) { return equals(args[0]); } else if ("annotationType".equals(method.getName())) { return annotationType(); } else if ("toString".equals(method.getName())) { return toString(); } return method.getDefaultValue(); }