2015-07-20 23 views
1

舉例來說,一種方法:如何創建可以在多個類作爲輸入

public static String[] multipleOfSameSet(String var,int setLength){ 
    String[] out = new String[setLength]; 
    for(int i=0; i<setLength; i++){ 
     out[i] = var; 
    } 
    return out; 
} 

,但我想這對於int,double和其他十類工作。 我嘗試使用類代替字符串,它給了我一個錯誤的世界。這裏:

甚至有可能嗎?如果是的話,我該怎麼做?

+0

答案被稱爲[泛型類型(https://docs.oracle.com/javase/tutorial/java/泛型/ types.html) – Laszlowaty

+0

你是什麼要通過這樣做來完成?你可以使用泛型類「對象」,但可能有更好的方法來做任何你想要做的事情。 – Zarwan

+0

答案也被稱爲基於協議的開發...確保您的各種輸入類型實現必要的接口。 – BonanzaDriver

回答

3

是的,這是可能的。一種選擇是嘗試找到一個類,該類是所有要使用的類的超類,或者是所有類實現的接口。在你的情況下,唯一的候選對象可能是對象:

public static Object[] multipleOfSameSet(Object var, int setLength) { 
    Object[] out = new Object[setLength]; 
    for(int i = 0; i < setLength; i++) { 
     out[i] = var; 
    } 
    return out; 
} 

這將起作用,因爲所有Java類都直接或間接地擴展Object。原始值自動轉換爲對象(int變成Integer s,雙倍變成Double s等等)。

這種方法的不足之處在於,你得到一個對象數組,並且你可以用這些做的事情不多。你可能要考慮是不是讓你的方法接受一些泛型類型T,並返回T的一個ArrayList:

public static <T> ArrayList<T> multipleOfSameSet(T object, int setLength) { 
    ArrayList<T> out = new ArrayList<T>(); 
    for(int i = 0; i < setLength; i++) { 
     out.add(object); 
    } 
    return out; 
} 

但是,如果你不需要事後修改的名單,我會去這樣的:

public static <T> List<T> multipleOfSameSet(T object, int setLength) { 
    return Collections.nCopies(setLength, object); 
} 
+0

這是不好的解決方案。它迫使你使用'預測'。 – Laszlowaty

+0

@Laszlowaty它的工作原理,但你爲什麼說這是不好的解決方案,什麼是預測? – kbluue

+0

當您將對象投射到某個在運行時無法正確運行的具體類時,它會導致類拋出異常 – Constantin

0

可以使用接口或定義的類類型..

public static MyInterface[] multipleOfSameSet(MyInterface var, int setLength) { 
    MyInterface[] out = new MyInterface[setLength]; 
    for(int i = 0; i < setLength; i++) { 
     out[i] = var; 
    } 
    return out; 
} 
相關問題