我正在尝试将调用处理程序序列化为文件。我只是试图序列化以下部分,因为它是程序中唯一会改变的部分:
public Object invoke(Object proxy, Method method, Object[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException{
System.out.println("BEFORE");
method.invoke(original, args);
System.out.println("AFTER");
//System.out.println(method);
return null;
}
我收到以下错误
run:Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - Erroneous tree type: <any>
at jdkproxydemo.JdkProxyDemo.main(JdkProxyDemo.java:69)
C:\Users\ACK\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 1 second)
这是完整的代码:
public class JdkProxyDemo {
interface If {
int originalMethod(String s);
}
static class Original implements If {
public int originalMethod(String s) {
System.out.println(s);
return 0;
}
}
public static class Handler implements InvocationHandler, Serializable {
private final If original;
public Handler(If original) {
this.original = original;
}
public Object invoke(Object proxy, Method method, Object[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException{
System.out.println("BEFORE");
method.invoke(original, args);
System.out.println("AFTER");
//System.out.println(method);
return null;
}
}
public static void main(String[] args) throws FileNotFoundException, IOException{
/// OutputStream file = null;
Original original = new Original();
Handler handler = new Handler(original);
If f = (If) Proxy.newProxyInstance(If.class.getClassLoader(),new Class[] { If.class },handler);
OutputStream file = new FileOutputStream("quarks.ser");
OutputStream buffer = new BufferedOutputStream(file);
ObjectOutput output = new ObjectOutputStream(buffer);
output.writeObject(handler.invoke(f,handler.original,"a"));
output.close();
}
}
实现此结果的最佳方法是序列化代理对象是什么?