声明一个类并一次性内联分配它的语法是什么?
编辑:我更新了我的问题——我需要通过将一些变量传递给构造函数来自定义已实现方法的行为。
即
Foo foo = new Foo(int a) implements Bar {
int a;
public Foo() {
this.a = a;
}
// Bar's method
void xyz() {
if (this.a == ... ) ...
}
};
最佳答案
您所描述的是 anonymous class ,因此在声明变量时不能使用名称,因为正式来说它没有名称。 (在幕后,作为一个实现细节,它确实如此。)
要声明变量,通常使用接口(interface)或基类作为类型实现/子类化,例如:
Bar foo = new Bar() {
@Override
void someRelevantMethod() {
// ...
}
};
回复你的评论:
i need to pass params to Bar, hence I need constructor in Fo
然后你需要使用一个 inner class 而不是匿名类,因为匿名类 can't have an explicit constructor .
但是您可能不需要构造函数,因为:
匿名类可以访问其封闭实例的实例字段。
匿名类在您创建它们的范围内关闭
final
变量。
例如,如果您用来修改基类行为的变量不改变,只需在封闭范围内将它们声明为final
,赋予他们值(value),并在实现中使用这些值(value)。或者,如果它们发生变化,但它们是封闭类中的实例字段,则直接使用它们即可。
但是,如果值发生变化并且无法从封闭类的实例字段中获得,您将需要一个内部类(或者甚至可能是一个 static nested class 或独立类)。
关于java内联类的声明和分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33285945/