2017-03-17 84 views
2

我的意思是這樣的:如何在Java中創建一個可用多種類型調用的函數?

function f(int a) { 

} 
function f(double a) { 

} 
function f(string a) { 

} 

我想要一個可以使用相同的名稱(f)和相同的變量的名稱(a)被調用的函數,但不是同一個類型(intdouble等)

謝謝!

+0

這就是你所說的重載方法。 – msagala25

+0

你不要用關鍵字'function'在Java中聲明函數。如果這意味着返回類型,那麼類型名稱應遵循Java命名約定。在Java中稱爲「方法」的函數必須是一個類型的成員,您不會顯示。除此之外,你可以通過做你所做的事來做你想做的事情,聲明在不同類型上運行的函數版本。 –

+0

函數聲明中的變量名稱是佔位符,由函數在內部使用,但對其客戶端沒有任何命名要求。 –

回答

5

你要找的仿製藥:

實例方法:

public <T> void f(T a) { // T can be any type 
    System.out.println(a); // test to see `a` is printed 
    // Do something.. 
} 

類方法:

public static <T> void f(T a) { // T can be any type 
    System.out.println(a); // test to see `a` is printed 
    // Do something.. 
} 

假設這是您的main方法裏面,你可以調用類的方法是這樣的:

實施例1:

int number = 10; 
f(number); 

實施例2:

String str = "hello world"; 
f(str); 

實施例3:

char myChar = 'H'; 
f(myChar); 

實施例4:

double floatNumber = 10.00; 
f(floatNumber); 

和任何其他類型。

深入閱讀Generics

Java Documentation of Generics

+1

他們可能正在尋找仿製藥。或者他們可能在尋找重載。或者他們可能正在尋找函數引用。或者他們可能正在尋找lambdas,這將涉及泛型,但對於已經在Java API中的Interfaces。 –

+0

@LewBloch我當然同意你的意見,但我不可能向他建議所有可能的想法。這個答案似乎是我在問問題時想到的。不過謝謝。 –

+0

@LewBloch此外,如果您有任何建議可以更好地回答問題,請隨時編輯,如果我覺得合適,我會接受。 –

3

Java類可以有同名的方法,但不同的參數類型,就像你問的。

public class Foo { 

    public void f(int a){ 
     System.out.println(a); 
    } 

    public void f(double a){ 
     System.out.println(a); 
    } 

    public void f(String a){ 
     System.out.println(a); 
    } 

    public static void main(String[] args) throws InterruptedException{ 
     Foo f = new Foo(); 
     f.f(9.0); 
     f.f(3); 
     f.f("Hello world!"); 
    } 

} 
相關問題