请问这是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的实现?
------解决方案--------------------里层的花括号是
初始化块,
当构建一个对象执行构造方法前,先执行初始化块里的内容。
希望我的回答能帮到你