【问题标题】:Java - Passing an array directly into the constructor, not as a variableJava - 将数组直接传递给构造函数,而不是作为变量
【发布时间】:2016-03-03 02:40:48
【问题描述】:

我们来看下面的例子:

public class Test {
    public void main(String[] args) {
        int[] someInts = {1, 2, 5};
        new Dummy(1, someInts, "Hello");    //works
        new Dummy(1, new int[] {1, 2, 5}, "Hello"); //works
        new Dummy(1, {1, 2, 5}, "Hello");   //fails
        new Dummy(1, [1, 2, 5], "Hello");   //fails
    }

    public class Dummy {
        Dummy(int someNumber, int[] someArray, String message) {

        }
    }
}

对于两个失败的行,Eclipse 说:“构造函数 Test.Dummy(int, int, int, int, String) 是未定义的”

首先,我不明白为什么它不将数组识别为数组(仅在失败的行中)。

其次,为什么不能直接将数组传入构造函数,而必须创建一个变量来传递呢?

第三,有没有一种方法可以创建一个构造函数,该构造函数采用类似该行的内容,即没有变量或new int[] {...} 语句?

如果有人知道在标题中表达这一点的更好方法,请随时改进它。

【问题讨论】:

    标签: java arrays constructor arguments


    【解决方案1】:

    如前所述,这就是在一般情况下创建数组字面量的方式。

    您可以将数组替换为 int... array 可变参数参数,但您需要将其设为最后一个参数。

    Dummy(int someNumber, String message, int... someArray) {}
    new Dummy(1, "Hello", 1, 2, 5);
    

    【讨论】:

    • 我也知道那个语法,但这不是我要搜索的。
    • 那就更好地解释你自己。您是否希望我们既为您提供免费建议了解您的想法?
    • "有没有一种方法可以创建一个构造函数,该构造函数采用类似该行的内容,这意味着没有变量或 new int[] {...} 语句?" 这就是我的问题中所说的,这就是我正在寻找的。有没有办法或最短的方法真正使new 语句内联?
    • 好吧,我提供了最短的方法,因为它仍然是一个数组,但编译器只处理语法。
    • 嗯,从技术上讲,他做到了。但问题是我的构造函数需要三个相同类型的数组,而不幸的是,Kayaman 的解决方案只有在只有一个的情况下才有效。
    【解决方案2】:

    new Dummy(1, {1, 2, 5}, "Hello");,数组初始化只能使用{}语法。使用new Dummy(1,new int[] {1, 2, 5}, "Hello");

    【讨论】:

      猜你喜欢
      • 2020-08-30
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 2014-12-29
      • 2020-01-16
      • 2013-08-10
      • 1970-01-01
      相关资源
      最近更新 更多