关于类似于 类.class 和 类.this 作为参数的问题
我初学SSH,看到拦截器的部分,发现源码里有这样一段:
[注:这是纯java,与web无关]
代码如下:
if (interceptors.hasNext()) {
final InterceptorMapping interceptor = (InterceptorMapping) interceptors.next();
UtilTimerStack.profile("interceptor: "+interceptor.getName(),
new UtilTimerStack.ProfilingBlock<String>() {
public String doProfiling() throws Exception {
// 将ActionInvocation作为参数,调用interceptor中的intercept方法执行
resultCode = interceptor.getInterceptor().intercept(DefaultActionInvocation.this); //问题在这!!!
return null;
}
});
} else {
resultCode = invokeActionOnly();
}
我特别注意到:
这段代码里有一句
resultCode = interceptor.getInterceptor().intercept(DefaultActionInvocation.this);
于是,开始提问:
问题1:resultCode = interceptor.getInterceptor().intercept(DefaultActionInvocation.this); 中,
DefaultActionInvocation.this是什么意思???有没有作用,我没明白。
或者换句话说,
对一个普通的public class A(),
在class B中来一个
class B{
function(){
method(A.this);
}
}
这有什么作用或说意思 ?这指的是什么 ?
----------------------------分割线-----------
问题2:
由问题1想到之前碰到的类似的问题,
假设:class A 和 class B ,class C,假设在某个代码中,有这样一句代码关联3者:
private final static C _c = B.getA(C.class);
显然, A肯定是包含了C的实现的【我猜的,不知正确否,请指教】,而B里面有一个静态获取A的函数getA(),
那么他来个C.class有个什么意思?
真想不通,望指教 ...
[解决办法]
第一个问题:
我没看源码,以下只是我的猜想:
传入DefaultActionInvocation.this是因为intercept方法要使用DefaultActionInvocation类中的方法或者属性。
第二个问题和第一个问题一样
[解决办法]
你是说在这里DefaultActionInvocation.this和this是不同的?
[解决办法]
不同的,在内部类中,this只能指代内部类自身,内部类想要取得外部类对象引用需要使用 外部类.this
[解决办法]
问题2的话,C.class类型为Class<C>,Class类一般用在一些需要使用反射的功能中
我不太明白你意思,getA(Class)方法返回值类型不是C吗
。。。完全不知道在问什么,拿个实际的代码来说说吧
[解决办法]
不同的,在内部类中,this只能指代内部类自身,内部类想要取得外部类对象引用需要使用 外部类.this
对的,我没注意到内部类,谢谢解释
我找struts源码,没找到这段,只找到类似的一段
不过这个doProfiling()方法仅仅只是外包了一层
[解决办法]
问题2的话,C.class类型为Class<C>,Class类一般用在一些需要使用反射的功能中
我不太明白你意思,getA(Class)方法返回值类型不是C吗
。。。完全不知道在问什么,拿个实际的代码来说说吧
其实就是想问,A.class 和 new A()【假定A是非抽象类或接口类】之间有什么区别,
因为经常看到别人传个A.class的参数,而我却总想把它改成new A()。
后来看到源码里面也这样说,
所以,想问问:A.class 和 new A()【假定A是非抽象类或接口类】之间有什么区别。
基础还没弄明白吧。
在这里A是一个类;A.class是一个对象,类型为Class<A>;new A()调用的是A类的构造方法,获得一个类型为A的一个对象。
不是同一个类的对象,这就是区别。回去补一补反射相关的内容吧