求助一个关于动态代理中InvocationHandler接口的invoke方法返回值的问题

liujinjiaer 2013-01-14 11:46:16

public interface Subject
{
public boolean request();
}
这是抽象角色的公共接口

public class RealSubject implements Subject
{
public boolean request()
{
boolean b = false;
System.out.println(b);
return b;
}
}
这是具体角色,被代理类

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class DynamicProxy implements InvocationHandler
{
Object obj;
public DynamicProxy(Object obj)
{
this.obj = obj;
}
public Object invoke(Object proxy, Method method, Object[] args)throws Throwable
{
System.out.println("before proxy:" + method);
Object object = method.invoke(obj, args);
//method.invoke(obj,args);
System.out.println("after proxy:" + method);
return object;
//return null;
}
}
这是代理类

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

public class Client
{
public static void main(String[] args)
{
RealSubject real = new RealSubject();
InvocationHandler handler = new DynamicProxy(real);
Class<?> classType = handler.getClass();
Subject sub = (Subject)Proxy.newProxyInstance(classType.getClassLoader(), real.getClass().getInterfaces()
, handler);
sub.request(); }
}
这是测试类
假如运行代理类中被注释掉的语句,在运行结束后产生NullPointerException;假如把公共接口中的那个方法返回值改为void就不会出现这样的情况,请大家帮帮忙这是什么情况。
...全文
477 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
渔丶 2013-01-14
  • 打赏
  • 举报
回复

//return null; 
你返回null了啊,他要对结果进一步处理的,比如强转为你定义的返回类型,这时候就会报错啊 你返回void,就不需要进一步处理,那就不会报错了。。。 这个应该是显而易见的吧
liujinjiaer 2013-01-14
  • 打赏
  • 举报
回复
引用 1 楼 zzvnzz 的回复:
Java code ? 12 //return null; 你返回null了啊,他要对结果进一步处理的,比如强转为你定义的返回类型,这时候就会报错啊 你返回void,就不需要进一步处理,那就不会报错了。。。 这个应该是显而易见的吧
API里面已经写了,我无知了!

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧