public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if ("equals".equals(method.getName())) { throw new UnsupportedOperationException(); } else if ("hashCode".equals(method.getName())) { return Integer.valueOf(reader.hashCode()); } else if ("toString".equals(method.getName())) { return "ReaderHandler [" + reader + "]"; } else { try { return method.invoke(proxy, args); } catch (Exception e) { throw new FormatException(e); } } }