将数组传递给构造函数而不声明它?

Lar*_*ert 3 java arrays processing

在处理中,我定义了以下类:

class SomeClass {
    SomeClass(int[] someArray) {
        println(someArray);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想创建该类的实例,但是我无法将数组传递给构造函数:

SomeClass myVar = new SomeClass({
    12, 10
});
Run Code Online (Sandbox Code Playgroud)

但这总是给我一个错误"意外的令牌:{".所以显然"动态"定义阵列是行不通的.

但是,这将有效:

int[] dummy = {12, 10};

SomeClass myVar = new SomeClass(dummy);
Run Code Online (Sandbox Code Playgroud)

但是我觉得在对象之外声明这个数组是相当愚蠢的,因为这会在创建多个对象时带来各种麻烦:

int[] dummy = {12, 10};
SomeClass myVar = new SomeClass(dummy);

dummy = {0, 100};
SomeClass myVar2 = new SomeClass(dummy);
Run Code Online (Sandbox Code Playgroud)

该类的两个实例现在都引用了相同的数组{0, 100},这肯定不是我打算做的.

所以我的问题是:如何正确地将数组传递给类的构造函数而不必在之前声明数组?它甚至可能吗?

谢谢您的回答!

Pet*_*ros 6

你仍然需要在发送之前以某种方式定义它...试试这个:

SomeClass myVar = new SomeClass(new int [] {
    12, 10
});
Run Code Online (Sandbox Code Playgroud)

或者你可以尝试一些Java的语法糖......

class SomeClass {
    SomeClass(int... someArray) {
        println(someArray);
    }
}
SomeClass myVar = new SomeClass(12, 10);
Run Code Online (Sandbox Code Playgroud)

这将对您的编码风格引入一些限制......例如,您可以这样做:(特殊语法作为最后一个元素)

class SomeClass {
    SomeClass(String someString, float someFloat, int... someArray) {
        println(someString);
        println(someFloat);
        println(someArray);
    }
}
SomeClass myVar = new SomeClass("lol",3.14, 12, 10);
Run Code Online (Sandbox Code Playgroud)

但不是这样:(特殊语法不是最后一个元素)

class SomeClass {
    SomeClass(String someString, int... someArray, float someFloat) {
        println(someString);
        println(someFloat);
        println(someArray);
    }
}
SomeClass myVar = new SomeClass("lol", 12, 10,3.14);
Run Code Online (Sandbox Code Playgroud)

阵列很有趣!!

  • 实际上,第一个语法 `new int [] {` 正是我的意思,因为我现在不必将数组的引用存储在变量中。但是 `...` 语法非常棒。我在 Java 中并不是很流畅,但喜欢使用处理 - 这是一个很棒的技巧! (2认同)