java内联类的声明和分配

标签 java

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

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

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/

相关文章:

java - 安卓工作室 : Change EditText filed from a java class

java - GridBagLayout 添加后不要使组件 "jump"

java - 在 EditText 框中调出上下文菜单时遇到错误

java - Spring Batch-集成复用组件

java - 如何在签名小程序中使用多个 jar?

java - X509证书生命周期

java - 如何相对于子目录运行 Jenkins 管道?

java - 将图像旋转回其原始状态

java - 如何从 Java 代码调用 Excel VBA 宏?

java - 如何在 Spark RDD(Java)中按索引获取元素