2015-06-29 76 views
2

當我用Java編寫的構造是這樣的:這些要點代表什麼?

import java.io.IOException; 
import java.io.OutputStream; 

public class MultiOutputStream extends OutputStream{ 

    OutputStream[] oStream; 

    public MultiOutputStream(OutputStream oStream) { 
     this.oStream = oStream; 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void write(int arg0) throws IOException { 
     // TODO Auto-generated method stub 

    } 
} 

現在Eclipse說:類型不匹配:不能從轉換的OutputStream到的OutputStream []。所以Eclipse改正了我這樣的構造函數:

import java.io.IOException; 
import java.io.OutputStream; 

public class MultiOutputStream extends OutputStream{ 

    OutputStream[] oStream; 

    public MultiOutputStream(OutputStream... oStream) { 
     this.oStream = oStream; 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void write(int arg0) throws IOException { 
     // TODO Auto-generated method stub 

    } 

} 

這些觀點代表什麼?

在此先感謝!

+1

其目的是讓開發人員不必寫明確匹配的構造函數就可以傳遞1,2,3 ... args,並且不會強制您接受「集合」。 –

+0

你以前做過什麼研究? – GhostCat

+0

至少我不知道如何谷歌這三個時期。 – aGer

回答

1

這些點被稱爲varargs。你可以閱讀更多關於他們here

總而言之,它們用於允許無限量的該類型的參數傳遞給方法。這允許更簡單的訪問和更簡潔的代碼。當您嘗試使用它時,vararg就像一個數組。

3

這是一種稱爲可變參數的合成糖

public void method(int... varargs) { } 

您可以使用多個參數,例如調用這個方法:method(3, 14),也method(42)
這是處理不確定數量參數的方法的常用方法,例如在String::format中使用它。

編譯器會自動將參數收集到數組背後的數組中。在此代碼中,varargs是一個int的數組,因此您可以輕鬆地遍歷它。

public void method(int... varargs) { 
    for(int i=0; i < varargs.length; i++) { 
    System.out.println("Argument n°"+i+" is "+varargs[i]); 
    } 
}