为什么不能在 Java 构造函数中使用字段的速记数组初始化?



举个例子:

private int[] list;
public Listing() {
    // Why can't I do this?
    list = {4, 5, 6, 7, 8};
    // I have to do this:
    int[] contents = {4, 5, 6, 7, 8};
    list = contents;
}

为什么我不能使用速记初始化?我能想到的解决这个问题的唯一方法是创建另一个数组并将list设置为该数组。

当您在定义行定义数组时,它假设它知道类型是什么,因此new int[]是冗余的。然而,当你使用赋值时,它并不假设它知道数组的类型,所以你必须指定它。

当然其他语言对此没有问题,但在Java中,区别在于您是否在同一行定义和初始化字段/变量

试试list = new int[]{4, 5, 6, 7, 8};

除了使用new Object[]{blah, blah....}之外,这里有一个稍短的方法来完成您想要的操作。使用下面的方法。

public static Object [] args(Object... vararg) {
    Object[] array = new Object[vararg.length];
    for (int i = 0; i < vararg.length; i++) {
        array[i] = vararg[i];
    }
    return array;
}

PS - Java很好,但是在这种情况下它很糟糕。如果可能的话,在你的项目中尝试使用ruby或python &合理的。(看,java 8仍然没有填充hashmap的简写,而且他们花了很长时间才做出一个小的改变来提高开发人员的生产力)

相关内容

  • 没有找到相关文章