2013-01-15 37 views
0

那麼問題就說明了一切。下面有什麼,我想如何在java中創建現有對象的數據類型列表

String s = new String(); 
List<s.type> ls = new ArrayList<s.type>(); 

類似的東西,或任何優雅的方式爲例來實現這一點,請無多,如果條件或條件邏輯,因爲有可能是無限的數據類型,我已經使用字符串這裏只是作爲一個例子,它可以是任何東西。

+0

好吧有人真的給了一個非常接近的答案,現在刪除了回答:/那些尷尬的時刻..... – Eventor

回答

0

如果我理解正確的,你想知道類()的實例(對象)在運行時(現有),其中有無關泛型不過,因爲切赫解釋。

public class Types {  
public static void main(String[] args) { 
    String s = ""; 
    Runtime r = Runtime.getRuntime(); 
    Types t = new Types(); 

    List<Class> types = new LinkedList<Class>();   
    types.add(Integer.class); 
    types.add(t.getClass()); 
    types.add(r.getClass()); 
    types.add(s.getClass()); 

    for (Class type :types) { 
     System.out.println(type.getSimpleName()); 
    }   
}  
} 

,輸出:

Integer 
Types 
Runtime 
String 

然而,很少需要這樣的做法,所以重新思考有沒有一種更簡單的解決您的問題。如果你仍然想解決這樣的:

編輯:

你的問題的另一解釋導致動態泛型列表的答案:

public static <T> List<T> createListOfType() { 
    return new ArrayList<T>(); 
} 

public static void main(String[] args) { 
    List<String> a = createListOfType();  
    List<Integer> b = createListOfType(); 
    a.add(""); 
    b.add(2); 
    a.add(2); // remove this line to compile 
    b.add(""); // remove this line to compile  
} 
+0

這對我的應用程序的另一部分很有用,提高了優雅和可擴展性,謝謝你。但不是我的問題的解決方案。 – Eventor

+0

啊其他實現接近什麼即時通訊尋找謝謝。 – Eventor

+0

歡迎 – linski

5

如果你想獲得s的運行時類型並在泛型中使用它,這是不可能的。 Java中的泛型僅在編譯時用於類型檢查和類型推斷。通用的信息在運行時被刪除,因此運行時無法區分List<String>List<Integer>之間的差異。

如果你只是想爲s編譯時知道類型而不是通用的,因爲你已經知道s的類型,並且你可以爲它寫一個類名。

相關問題