Java不定參數Object… obj 和 Object[] 的區別


Java不定參數Object… obj 和 Object[] 的區別

簡述:

java中方法重載可以實現參數不同自動匹配對應方法。但現實中也存在這種問題。普通傳參對於形如下面的方法,卻顯得臃腫而失優雅。

 Map getRealLine( int left, int top String color)
 //others method 
 Map getRealLine( int left, int right, int top , int bottom, String color)
 Map getRealLine( int left, int right, int top , int bottom, String color, String rgb)
 Map getRealLine( int left, int right, int top , int bottom, String color, String rgb, String hh)
 Map getRealLine( int left, int right, int top , int bottom, String color, String rgb, String hh, String flowLine)

引導:

1,正如上述例子,假設所有的情況都包含了。突然有一天,繪制圖線功能擴展了,還可以給定點的名稱String title。這下,我們又要添加一系列的方法。

注:可能有高手會說,為什么不給一個方法,里面參數是全的(最大化參數)。如果不給的時候置0,或者置null。對這一說法,建議質疑一下JDK中的一些類,定有所獲。

2,假設如果有一種機制,可以如下來定義,將為帶來方便。

 Map getRealLine( int[] posiontElements, String[] descriptions)

同時在使用時這樣調用他:

 //備參 
 int[] intArr = new int[]{"1", "2", "3", "4"};
 String[] strArr = new String[]{"read", "#994e8a"};
 //調用 
 this.obj.getRealLine( intArr , strArr );

3,僅僅如此,那不就是采用數組傳參了。實踐中我們發現每次用數組的時候,都有個准備參數的過程,一般情況下,又只用一組參數中的一個,比方說color。那么每次創建數組、初始化數組,傳參,顯示很繁鎖。比較優雅的作法是,傳進去的參數都自動轉為數組形式。這樣,在調用方法的時候,留白、置空、單串、多串、數組,都可以被接收,可以大大減輕重復准備數據的體力勞動。測試代碼如下,通過這些代碼,能對“String… args”有個大體的了解。

 public class StrParamTest {
  
 
 public static void main(String[] args) {
 String[] strings = new String[]{"1","2"};
  
 StrParamTest.sayHi(strings);
 StrParamTest.sayHi("A");
 
 StrParamTest.sayHi("O", "P");
 StrParamTest.sayHi();
 StrParamTest.sayHi(null);
 }
 
 private static void sayHi( String... strings ){
  
 System.out.println("----------" + strings);
 
 if ( strings != null ) {
 
 for (String string : strings) {
 
 System.out.println(string);
 }
 }
 else {
 System.out.println("=========null");
 }
 }
  
 }

 

結果如下:

 ----------[Ljava.lang.String;@de6ced
 1
 2
 ----------[Ljava.lang.String;@c17164
 A
 ----------[Ljava.lang.String;@1fb8ee3
 O
 P
 ----------[Ljava.lang.String;@61de33
 ----------null
 =========null

 

4,斷點調試后發現正是想要的東西。開心吧 ~。=

小結:

1,String… args 傳參方式,為調用前的准備省了許多氣力;

2,一個方法里,只能有一個”…”這樣的可變參數,而且置於最后(方法重載匹配策略原因);

3,一個方法的參數很難考慮完整或者組內相同類型參數很多,采用此方法,可使代碼更加優雅,同時,修改時只需改動實現類即可。

Object是所有類的基類,這個你可以查詢jdk文檔了解,所有類都繼承自Object。Object ...objects這種參數定義是在不確定方法參數的情況下的一種多態表現形式。即這個方法可以傳遞多個參數,這個參數的個數是不確定的。這樣你在方法體中需要相應的做些處理。因為Object是基類,所以使用Object ...objects這樣的參數形式,允許一切繼承自Object的對象作為參數。這種方法在實際中應該還是比較少用的。Object[] obj這樣的形式,就是一個Object數組構成的參數形式。說明這個方法的參數是固定的,是一個Object數組,至於這個數組中存儲的元素,可以是繼承自Object的所有類的對象。這些基礎東西建議你多看幾遍"Think in java"希望我的回答對你有所幫助。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM