4

我有一些代码,其中有一个需要冗长的类声明的变量。我想在页面顶部定义变量,然后像这样定义它:

private IFoo bar;
/* seemingly irrelevant code */
bar = new IFoo() { /* a bunch of stuff */ };

但是我的 Java 编译器抱怨这不可能发生。它说之前的行上有一个语法错误 }(这真的没有意义,因为它在正确的位置)。

因此,为了让编译器安静下来,我将变量的定义放在了 more{ } 中。我忘记了这种模式叫什么,但我知道它为什么存在并且在我的情况下不应该真的是必需的。

{
    bar = new IFoo() { /* a bunch of stuff */ };
}

无论如何,我想我的问题是,为什么我不能做 bar = new IFoo(){}; 而不做 { bar = new IFoo(){}; }

其他细节:IFoo是一个接口,我使用 JDK 1.6 和 Android 和 Eclipse。

立即定义bar效果很好:

private IFoo bar = new IFoo() { /* stuff */ };
4

1 回答 1

4

它不起作用的原因是 Java 不允许独立的代码。您必须将代码放入方法、构造函数或初始化程序中。

这是一个初始化程序:

private IFoo bar = new IFoo() { /* a bunch of stuff */ };

这是一个声明,后面跟着一个赋值:

private IFoo bar;
/* seemingly irrelevant code */
bar = new IFoo() { /* a bunch of stuff */ };

bar如果你是一个局部变量(那么你需要删除) ,你可以在一个函数中做这种事情private。但是在类声明中是不允许的。

在赋值周围添加花括号使您的代码成为构造函数的一部分,再次允许赋值。这就是为什么以下任务有效的原因:

{
    bar = new IFoo() { /* a bunch of stuff */ };
}
于 2012-07-22T02:55:31.227 回答