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

请问这是java的什么写法?就像以前第一次遇到内部类时的样子!
    private final static List<String> nowords = new ArrayList<String>(){{
        try{
            addAll(IOUtils.readLines(SearchHelper.class.getResourceAsStream("/stopword.dic")));
        }catch(IOException e){
            log.error("Unabled to read stopword file", e);
        }
    }}; 
其中的 new ArrayList<String>(){{...}} 。后面的双花括号里面加代码是怎么个意思?

------解决方案--------------------
匿名类?看不出哪里是匿名类,求解

{{....}}显然是类的初始化块,能调用对象的所有的方法,但这种写法哪里流传出来的,求解
------解决方案--------------------
new ArrayList<String>(){};这样是匿名内部类吧,
new ArrayList<String>(){
   {
     //这个花括号是非静态初始化块,
   }
  static {
    //静态初始化块
  }
}
------解决方案--------------------
匿名内部类没有构造函数,初始化块是可以有的,你说的就是初始化块
敢问你这个匿名内部类有什么用么?
难道是自己修改ArrayList的实现?
------解决方案--------------------
里层的花括号是 初始化块

当构建一个对象执行构造方法前,先执行初始化块里的内容。


希望我的回答能帮到你