坑爹的 Java 可變參數,把我整得夠慘。。

最近在寫一個功能點,用了 Java 中的可變參數,真是把我搞得夠慘。。java

什麼是可變參數?編程

就是方法參數用 Object... args 三個點形式,一個參數能夠接收多個參數。數組

實際的代碼就不帖了,來看這個示例吧:微信

示例1code

public static void main(String[] args) {
    test("name=%s&memo=%s", "Java技術棧", "666");
}

private static void test(String text, Object... params) {
    String result = String.format(text, params);
    System.out.println(result);
}

你們猜結果是什麼?結果如咱們想象:orm

name=Java技術棧&memo=666

示例2對象

public static void main(String[] args) {
    test("name=%s&memo=%s", "Java技術棧");
}

private static void test(String text, Object... params) {
    String result = String.format(text, params, "666");
    System.out.println(result);
}

我把 "666" 移到了子方法裏面,放到了 format 最後,再來看下結果是什麼。開發

name=[Ljava.lang.Object;@4cb2c100&memo=666

這並不是是我想要的結果,把可變參數 params 數組對象地址做爲值輸出出來了,把我搞得夠慘,最後我幹掉了可變參數。。ast

JDK裏面不少有用到可變參數的,可實際開發中,並不建議使用可變參考,它帶來的困擾和潛在的問題會遠大於便利性,好比在方法重構、重寫等也會帶來不少問題。form

關於可變參數,也是有開發規範的,不能隨便寫。我找到了阿里巴巴的《Java開發手冊》中關於可變參數的規約。

相同參數類型,相同業務含義,才能夠使用 Java 的可變參數,避免使用 Object 。

說明:可變參數必須放置在參數列表的最後。 ( 提倡同窗們儘可能不用可變參數編程 )

正例: public List listUsers(String type, Long... ids) {...}

獲取這份阿里巴巴的Java開發手冊最新PDF版,你們能夠關注Java技術棧微信公衆號,在後臺回覆:手冊,便可獲取。

阿里巴巴也是不建議你們合做可變參數的,可知它帶來的坑會有多坑。。

另外,棧長已經整理了大量 Java 系列核心技術知識點文章,關注Java技術棧微信公衆號,在後臺回覆關鍵字:java,便可獲取最新版。

本文原創首發於微信公衆號:Java技術棧(id:javastack),轉載請原樣保留本信息。

相關文章
相關標籤/搜索