如何以清晰易读的方式根据参数创建数组?

这是我的问题:


我想以非常清晰易读的方式创建一个数组,以便读者能够立即知道数组的元素。


当数组固定后,就很容易也很清楚了:


    String[] columns = new String[] { "unit", "file_row", "unit_row", "content" };

    String[] types = new String[] { "INTEGER", "INTEGER", "INTEGER", "TEXT" };

但我也有变量数组,具体取决于参数:


    // Is an argument of my method, containing the variable elements of the future array

    String[] method_arg = new String[] {"key1", "key2"};


    // The clear and readable way doesn't work anymore

    String[] columns = new String[] { "unit", method_arg, "hash"};

    String[] types = new String[] { "INTEGER", method_arg_types, "INTEGER"};


    // And the ways that work are ... much less readable

    String[] columns = new String[] {"unit"};

    columns = Stream.concat(Arrays.stream(columns), Arrays.stream(method_arg)).toArray(String[]::new);

    columns = Stream.concat(Arrays.stream(columns), Arrays.stream(new String[] {"hash"})).toArray(String[]::new);


    // Awkward

    String[] types = new String[method_arg.length + 2];

    Arrays.fill(types, "TEXT");

    types[0] = "INTEGER";

如何使代码保持清晰易读?代码相当灵活,使用列表应该不是问题,但我宁愿避免使用非标准库。另外,我知道一个解决方案是创建一个方法来创建这些数组,例如


    join_arrays(new String[] {"unit"}, method_arg, new String[] {"hash"});

但如果有解决方案使代码清晰并避免创建专用函数,那就更好了。如果没有,我将求助于这个选项。


感谢您有一个愉快的一天 !


守着一只汪
浏览 164回答 3
3回答

森栏

我通常最终会使用自定义方法来解决此类问题:private&nbsp;<T>&nbsp;T[]&nbsp;makeArray(T...&nbsp;elements)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;elements; }你的例子看起来像:String[]&nbsp;columns&nbsp;=&nbsp;makeArray("unit",&nbsp;method_arg,&nbsp;"hash"); String[]&nbsp;types&nbsp;=&nbsp;makeArray("INTEGER",&nbsp;method_arg_types,&nbsp;"INTEGER");

心有法竹

我认为您误解了代码的清晰度和可读性。首先,您完全正确,代码的清晰度和可读性具有最高价值。但是,这并不意味着读者应该立即看到代码的结果 - 在您的情况下是数组的内容。这意味着读者首先可以清楚地看到代码的作用,其次可以清楚地看到代码是如何做的。有很多方法可以确保清晰度。将较长的方法分解为较短的方法,最好是 4 - 5 行,但最多不超过 10 - 15 行。确保每个方法仅处理一个逻辑上不可分割的问题。确保方法名称具有信息性参数数量保持最少 (0 - 3)参数的名称和顺序是有意义的。返回值与方法的目的相匹配。当然,这不是完整的列表。

梵蒂冈之花

Java 有一个更简单的方法,恕我直言,这更容易一点,并且可以被编译掉:-)示例用法,类似于其他建议:private static void method(String method_arg, String method_arg_types) {    String[] columns = array("INTEGER", method_arg, "INTEGER");    String[] types = array("INTEGER", method_arg_types, "INTEGER");}作为 var-args 实现方式的副作用,实现要容易得多。@SafeVarargspublic static <T> T[] array(T... values) {    return values;}它也在org.assertj.core.util中实现,恕我直言,它应该是 JDK 的一部分:-)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java