Why can't you use shorthand array initialization of fields in Java constructors?

久未见 提交于 2020-01-01 23:54:09

问题


Take the following example:

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;
}

Why can't I use shorthand initialization? The only way I can think of getting around this is making another array and setting list to that array.


回答1:


When you define the array on the definition line, it assumes it know what the type will be so the new int[] is redundant. However when you use assignment it doesn't assume it know the type of the array so you have specify it.

Certainly other languages don't have a problem with this, but in Java the difference is whether you are defining and initialising the fields/variable on the same line.




回答2:


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




回答3:


Besides using new Object[]{blah, blah....} Here is a slightly shorter approach to do what you want. Use the method below.

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 is good, but it sucks in situations like these. Try ruby or python for your project if possible & justifiable. (Look java 8 still has no shorthand for populating a hashmap, and it took them so long to make a small change to improve developer productivity)



来源:https://stackoverflow.com/questions/8302179/why-cant-you-use-shorthand-array-initialization-of-fields-in-java-constructors

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!