在 Java 中将数组作为参数传递时创建数组

Posted

技术标签:

【中文标题】在 Java 中将数组作为参数传递时创建数组【英文标题】:Creating an array while passing it as an argument in Java 【发布时间】:2011-11-24 18:03:10 【问题描述】:

有没有办法创建一个对象数组作为构造函数或方法的一部分?我真的不知道该怎么说,所以我举了一个例子。我有一个枚举,其中一个字段是一个数字数组。这是我尝试过的:

public enum KeyboardStuff 

    QWERTY(1, 0.5f, 1.3f, 23.1f, 6);
    DVORAK(5, 0.1f, 0.2f, 4.3f, 1.1f, 91);
    CHEROKEE(2, 22.0f, 11);

    private int number, thingy;
    private float[] theArray;

    private KeyboardStuff(int i, float[] anArray, int j) 
        // do things
    


编译器说方括号 无效,应该删除。有没有一种方法可以在不事先创建对象数组的情况下将数组作为参数传递?

【问题讨论】:

【参考方案1】:

你可以试试new float[] ...

public enum KeyboardStuff 

    QWERTY(1, new float[] 0.5f, 1.3f, 23.1f, 6);
    DVORAK(5, new float[] 0.1f, 0.2f, 4.3f, 1.1f, 91);
    CHEROKEE(2, new float[] 22.0f, 11);

    private int number, thingy;
    private float[] theArray;

    private KeyboardStuff(int i, float[] anArray, int j) 
        // do things
    


【讨论】:

【参考方案2】:

按照@Dave 的建议,我会使用可变参数

QWERTY(1, 6, 0.5, 1.3, 23.1);
DVORAK(5, 91, 0.1, 0.2, 4.3, 1.1);
CHEROKEE(2, 11, 22.0);

private final int number, thingy;
private final double[] theArray;

private KeyboardStuff(int number, int thingy, double... theArray) 
    // do things

使用float 比使用double 更好的情况很少见。 double 具有较小的舍入误差,并且只使用了 4 个字节。

【讨论】:

@Dave,我差点忘了这件事。感谢您提供此解决方案,但我可能需要创建多个 Object[] 参数,因此在这种情况下这并不理想。【参考方案3】:

有没有一种方法可以在不创建数组的情况下传递数组?

不,但您可以使用varargs 使其几乎不可见,尽管最后的int 可能需要移动。

【讨论】:

【参考方案4】:

如果使用列表而不是数组是一种选择,Java 的未来版本可能会开始支持“collection literals”语法,但不幸的是,它似乎没有进入 Java 8:

public enum KeyboardStuff 

    QWERTY(1, [0.5f, 1.3f, 23.1f], 6);
    DVORAK(5, [0.1f, 0.2f, 4.3f, 1.1f], 91);
    CHEROKEE(2, [22.0f], 11);

    private int number, thingy;
    private List<Float> values;

    private KeyboardStuff(int i, List<Float> values, int j) 
        // do things
    


【讨论】:

不幸的是,集合文字似乎也没有进入 Java 8。

以上是关于在 Java 中将数组作为参数传递时创建数组的主要内容,如果未能解决你的问题,请参考以下文章

Java学习:一维数组作为参数和返回值

在bash中将数组作为参数传递

如何在java方法中将数组作为参数传递?

我们如何在 C++ 中将二维数组/向量作为函数参数传递? [复制]

c# 请问数组能作为参数传递吗? 如果可以如何传递呢?

java数组作为参数传入函数怎么让他不变化