我有一些代码,我有一个需要冗长类声明的变量。我想在页面顶部定义变量,然后像下面那样定义它:
private IFoo bar;
/* seemingly irrelevant code */
bar = new IFoo() { /* a bunch of stuff */ };
但是我的Java编译器抱怨说这不会发生。它说在之前的}
上有一个语法错误(这实际上没有意义,因为它在适当的位置)。
为了安静编译器,我已将变量的定义放在更多{ }
内
。我忘了这个模式被称为什么,但我知道为什么它存在,在我的情况下不应该真的有必要。
{
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 */ };
答案 0 :(得分: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 */ };
}