2012-10-16 121 views
1

我有一個標誌,告訴我要使用哪個類的類型。應該使用靜態方法來檢索正確的類。類類型需要作爲泛型方法的輸入。返回實現接口的java類的類型

public class Config{ 
    public static int flag = 1; 
} 

public interface A { 
    public abstract int getResult(); 
} 

public class A1 implements A{ 
    public int getResult{ 
    // ... 
    } 
} 

public class A2 implements A{ 
    public int getResult{ 
    // ... 
    } 
} 

public class AType{ 

    public static Class getType(){ 
     switch (Config.flag) { 
    case 1: 
     return A1.class; 
    case 2: 
     return A2.class; 
     default: 
      return null; 
    } 
} 

「getType()」的返回類型錯誤。我已經嘗試了一些通用的返回類型,但因爲它似乎不工作,就像檢索類類型以進一步使用...

任何想法如何根據配置標誌返回不同的類類型?

我需要的類類型(A1或A2)作爲這樣一個泛型方法輸入:

public static <T extends Message> T[] getArrayFromStream(DataInputStream in, Class<T> returnType) 
     throws IOException { 
    return getArrayFromStream(in, returnType, new Object[0]); 
} 
+2

你是什麼意思「返回類型是錯誤的」?這是一個編譯錯誤?什麼是錯誤?你嘗試過哪些通用的返回類型? –

+1

我嘗試了一個類似的代碼,它對我來說工作得很好。你的錯誤是什麼? –

+0

如果我使用「Class」作爲返回類型,eclipse的錯誤消息是「此方法必須返回Class類型的結果」。 當我使用類「」的返回類型時,則錯誤爲「此方法必須返回Class <?extends Psid>類型的結果」。 當使用「」類時,eclipse告訴我「類型不匹配:無法從類轉換爲類」。 –

回答

3

我的猜測(由於缺乏信息)是你正在嘗試做這個:

Class clazz = getType(); 
A instance = clazz.newInstance(); 

如果這是你需要這樣的話......

public Class<? extends A> getType(){...} 

然後

Class<? extends A> clazz = getType(); 
A instance = clazz.newInstance(); 
+0

嗨,我已經試過了,但它沒有奏效。 我需要類類型(A1或A2)作爲一個更大的項目中的泛型方法的輸入,我不能只改變泛型方法。 該方法看起來像這樣: 公共靜態 T [] getArrayFromStream(DataInputStream類中,類返回類型) \t \t \t拋出IOException異常{ \t \t返回getArrayFromStream(在,返回類型,新的對象[0] ); \t} –

+0

我不認爲你給了我們足夠的上下文來幫助你。嘗試發佈更多的代碼,因爲當我們嘗試上面的代碼時,它會編譯。 –

+0

-_- ...我剛剛意識到我的swith-case子句和eclipse只是返回了一個誤導性錯誤。 :-( =>問題解決了。感謝您的幫助!「它編譯」的評論真的很有幫助!^^ –