数组声明技巧:使用它不好吗?

le-*_*ude 18 java

我宣布这个课程没有用.

public class ArrayTrick {

    public static char[] arr(char... arr) {
        return arr;
    }

    public static float[] arr(float... arr) {
        return arr;
    }

    public static double[] arr(double... arr) {
        return arr;
    }

    public static long[] arr(long... arr) {
        return arr;
    }

    public static int[] arr(int... arr) {
        return arr;
    }

    public static short[] arr(short... arr) {
        return arr;
    }

    public static byte[] arr(byte... arr) {
        return arr;
    }

    public static boolean[] arr(boolean... arr) {
        return arr;
    }

    public static <T> T[] arr(T... arr) {
        return arr;
    }

}
Run Code Online (Sandbox Code Playgroud)

这允许我(我的代码中有一个静态导入)声明这样的数组:

int[][] arr = arr(
   arr(1, 2, 1),
   arr(2, 1, 3),
   arr(3, 3, 3));
Run Code Online (Sandbox Code Playgroud)

我个人觉得它很有用,我工作的人很少了解它.

它来自于在使用python之后我对java数组声明感到沮丧的事实,并且我有时使用键盘很难找到大括号(我的旧笔记本电脑上的意大利标准).

我想知道的是:那样的工作有什么不好吗?你认为它足够可读吗?为什么这个把戏不出名?

roc*_*boy 45

与...没什么不同

int[][] arr = {{1, 2, 1},
               {2, 1, 3},
               {3, 3, 3}};
Run Code Online (Sandbox Code Playgroud)

另外,我不认为你可以逃避java中的花括号:)

  • yourMethod(new int [] [] {{1,2,1},{2,1,3},{3,3,3}}); 作品 (29认同)
  • @arshajii那里存在极小的大小差异,而`new int`形式使用普通Java.使用`arr`只是一个伎俩会导致_"为什么他会这样做,并且`arr`在引擎盖下做了一些特别的事情?"_维护人员稍后会出现问题 (6认同)
  • 你不能这样做通用数组.看到我的回答 (2认同)

Und*_*ned 19

它足够可读,但它并不常见或经常使用,因为使用以下方法在同一行上声明和初始化要容易得多:

int[][] arr = {
        {1,2,1},
        {2,1,3},
        {3,3,3}};
Run Code Online (Sandbox Code Playgroud)


Jan*_*s F 8

这个技巧并不出名,因为你真的不需要使用花括号表示法.避免那些大括号真的有帮助吗?在与C相关的语言中,我认为没有避免它们.

数组初始化:

int[][] arr = {
    {1, 2, 1},
    {2, 1, 3},
    {3, 3, 3}
};
Run Code Online (Sandbox Code Playgroud)

你的版本足够可读,但由于我知道语言支持这个,我想知道该函数是否会做更多的事情.


Ami*_*leb 4

有必要吗?那:

    String[][] arr = {{"2","3","4"},
                     {"3","4","5"},
                     {"4","5","6"}};
Run Code Online (Sandbox Code Playgroud)