gpt4 book ai didi

java内联类的声明和分配

转载 作者:行者123 更新时间:2023-11-29 06:31:17 26 4
gpt4 key购买 nike

声明一个类并一次性内联分配它的语法是什么?

编辑:我更新了我的问题——我需要通过将一些变量传递给构造函数来自定义已实现方法的行为。

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com