亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何以清晰易讀的方式根據參數創建數組?

如何以清晰易讀的方式根據參數創建數組?

守著一只汪 2023-08-09 14:55:48
這是我的問題:我想以非常清晰易讀的方式創建一個數組,以便讀者能夠立即知道數組的元素。當數組固定后,就很容易也很清楚了:    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"});但如果有解決方案使代碼清晰并避免創建專用函數,那就更好了。如果沒有,我將求助于這個選項。感謝您有一個愉快的一天 !
查看完整描述

3 回答

?
森欄

TA貢獻1810條經驗 獲得超5個贊

我通常最終會使用自定義方法來解決此類問題:

private <T> T[] makeArray(T... elements) {
    return elements;
}

你的例子看起來像:

String[] columns = makeArray("unit", method_arg, "hash");
String[] types = makeArray("INTEGER", method_arg_types, "INTEGER");


查看完整回答
反對 回復 2023-08-09
?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

我認為您誤解了代碼的清晰度和可讀性。首先,您完全正確,代碼的清晰度和可讀性具有最高價值。但是,這并不意味著讀者應該立即看到代碼的結果 - 在您的情況下是數組的內容。這意味著讀者首先可以清楚地看到代碼的作用,其次可以清楚地看到代碼是如何做的。有很多方法可以確保清晰度。

  • 將較長的方法分解為較短的方法,最好是 4 - 5 行,但最多不超過 10 - 15 行。確保每個方法僅處理一個邏輯上不可分割的問題。

  • 確保方法名稱具有信息性

  • 參數數量保持最少 (0 - 3)

  • 參數的名稱和順序是有意義的。

  • 返回值與方法的目的相匹配。

當然,這不是完整的列表。


查看完整回答
反對 回復 2023-08-09
?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

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 實現方式的副作用,實現要容易得多。


@SafeVarargs

public static <T> T[] array(T... values) {

? ? return values;

}

它也在org.assertj.core.util中實現,恕我直言,它應該是 JDK 的一部分:-)



查看完整回答
反對 回復 2023-08-09
  • 3 回答
  • 0 關注
  • 224 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號