日期:2014-05-20  浏览次数:20648 次

实例化时可以同时override吗
高手解释下下面这段代码,自己感觉代码是在实例化的同时,直接对父类方法override了,但因为第一次看到这种代码,不敢肯定,高手近来指点下,这样写可以吗?有什么好处?    

    private   ThreadLocal   matchers   =   new   ThreadLocal()   {
                protected   synchronized   Object   initialValue()   {
                    return   new   Perl5Matcher();
                }
            };

------解决方案--------------------
无名内部类
楼主的理解也没什么问题
------解决方案--------------------
这叫做匿名内部类(Anonymous inner class),直接在初始化时定义类,相当于:

class T extends ThreadLocal() { .... }
private ThreadLocal matchers = new T();

如果内部类只初始化一次,用匿名内部类可以简化代码。