![](/img/trans.png)
[英]method to take string inside curly braces using split or tokenizer
[英]Using curly braces inside object initialization block
为什么仅在范围大括号内设置函数bind()
存在?
public void initialize() {
inputsAreFull = new BooleanBinding() {
{
bind();
}
@Override
protected boolean computeValue() {
return false;
}
};
}
IntelliJ在大括号内时会自动推荐bind()
,但在大括号内不存在该功能吗?
这行不通:
public void initialize() {
inputsAreFull = new BooleanBinding() {
bind();
@Override
protected boolean computeValue() {
return false;
}
};
}
您使用的语法是用于声明BooleanBinding
类型的实现的快捷方式。 您实际上是在类声明中。
public void initialize(){
inputsAreFull = new BooleanBinding() {
// This is equivalent to a class level scope for your anonymous class implementation.
{
bind();
}
@Override
protected boolean computeValue() {
return false;
}
};
}
没有初始化程序块,您不能在类级别随机调用方法。 您可以通过编写来测试...
class MyClass extends BooleanBinding {
bind(); // It's not gonna be very happy with you.
@Override
protected boolean computeValue() {
return false;
}
}
具有运行示例的IDEOne: http ://ideone.com/EERkXB
另请参见什么是初始化块?
new BooleanBinding() { ... }
引入了BooleanBinding
的匿名子类。
现在bind
是一个受保护的方法,因此不允许执行inputsAreFull.bind()
。
但是可以在子类主体中的匿名初始化程序块{ ... }
中调用bind。
还有一点需要注意:由于此时对象尚未完全初始化; 如果实际上是在BooleanBinding构造函数中执行的代码(由编译器负责),则方法bind
应该不可重写。 为此,可以使用private
或(这里) protected final
方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.