首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

关于类似于 类.class 和 类.this 作为参数的有关问题

2013-07-04 
关于类似于类.class 和类.this 作为参数的问题我初学SSH,看到拦截器的部分,发现源码里有这样一段:[注:这是

关于类似于 类.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类中的方法或者属性。
第二个问题和第一个问题一样
[解决办法]

引用:
Quote: 引用:

我觉得这个DefaultActionInvocation.this完全可以由this代替,它这样写可能是为了阅读上有醒目的强调效果


这个到不至于,因为this也有其独特之处 ... 

你是说在这里DefaultActionInvocation.this和this是不同的?
[解决办法]
不同的,在内部类中,this只能指代内部类自身,内部类想要取得外部类对象引用需要使用 外部类.this
[解决办法]
问题2的话,C.class类型为Class<C>,Class类一般用在一些需要使用反射的功能中
我不太明白你意思,getA(Class)方法返回值类型不是C吗
。。。完全不知道在问什么,拿个实际的代码来说说吧
[解决办法]
引用:
不同的,在内部类中,this只能指代内部类自身,内部类想要取得外部类对象引用需要使用 外部类.this

对的,我没注意到内部类,谢谢解释

我找struts源码,没找到这段,只找到类似的一段

不过这个doProfiling()方法仅仅只是外包了一层
[解决办法]
引用:
Quote: 引用:

问题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的一个对象。
不是同一个类的对象,这就是区别。回去补一补反射相关的内容吧

热点排行