java - 在调用 super() 之前声明变量,但 super 必须是第一个语句

标签 java constructor

我在抽象类中有一个构造函数,它在构造函数中接受许多参数

我正在尝试扩展此类,并且想在扩展构造函数中对 super() 的调用中设置一些默认值。

问题是,通过查看代码,它看起来很困惑:

super(0,1,2,3,4,5,6,7,8,9);

(请记住,这已针对堆栈溢出进行了简化)。

我想要做的是有这样的构造函数:

    public Test(){
    int a = 0;
    int b = 1;
    int c = 2;
    int d = 3;
    int e = 4;
    int f = 5;
    int g = 6;
    int h = 7;
    int i = 8;
    int j = 9;
    super(a,b,c,d,e,f,g,h,i,j);
}

纯粹为了视觉和易于阅读的目的。有什么办法可以做到这一点吗?

最佳答案

不,你不能这样做 - 但如果重要的部分是为参数提供有意义的名称,你可以考虑类似:

class Foo extends Bar {
    private static final int DEFAULT_WIDTH = 10;
    private static final int DEFAULT_HEIGHT = 10;

    public Foo() {
        super(DEFAULT_WIDTH, DEFAULT_HEIGHT);
    }
}

就我个人而言,我发现这比在构造函数中使用局部变量更不言自明。

另一个解释选项是注释:

public Foo() {
    super(
        10,  // width
        10); // height
}

无论如何,这只会与您的“声明单独变量”代码的行数相同。

关于java - 在调用 super() 之前声明变量,但 super 必须是第一个语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28299975/

相关文章:

java - 获取 Java lambda 表达式的封闭类

java - 使用 Java 驱动程序更新 MongoDB 中的数组

Java:打印文件不起作用

java - Google AppEngine 数据存储 - 远程登录?

plugins - 为小程序使用特定的 jre

c++ - 类组合构造函数 d 必须显式初始化引用成员

c++ - 我正在编码 Node 结构,我认为这是构造函数初始化错误

Kotlin:使用 parcelize 时的构造函数

java - 在构造函数中调用 this() 是否会隐式调用 super()?

objective-c - Cocoa 中使用的两阶段创建方法的最大优点是什么?