有时,为了进行测试,我使用快速的“双括号”初始化,该初始化在Outer类中创建了匿名嵌套类,例如:

static final Set<String> sSet1 = new HashSet<String>() {
    {
        add("string1");
        add("string2");
        // ...
    }
};

编辑
我正在纠正我以前的错误声明,即该示例始终引用Outer实例。它不是,它实际上等效于以下内容:
static final Set<String> sSet2;
static {
    sSet2 = new HashSet<String>() {
        {
            add("string1");
            add("string2");
            // ...
        }
    };
}
sSet1sSet2都使用匿名嵌套类初始化,这些类不引用Outer类。

这是否意味着这些匿名类实质上是static nested类?

最佳答案

就像在您要参考的相关问题中所讨论的那样,匿名类在技术上不能是静态的,但是如果在静态上下文中声明它,则可以有效地称为静态,也就是说,它没有对外部实例的引用。

但是,在您的情况下,两种方法之间绝对没有区别,静态字段的初始化也是静态上下文。

10-07 18:58
查看更多