那麼問題就說明了一切。下面有什麼,我想如何在java中創建現有對象的數據類型列表
String s = new String();
List<s.type> ls = new ArrayList<s.type>();
類似的東西,或任何優雅的方式爲例來實現這一點,請無多,如果條件或條件邏輯,因爲有可能是無限的數據類型,我已經使用字符串這裏只是作爲一個例子,它可以是任何東西。
那麼問題就說明了一切。下面有什麼,我想如何在java中創建現有對象的數據類型列表
String s = new String();
List<s.type> ls = new ArrayList<s.type>();
類似的東西,或任何優雅的方式爲例來實現這一點,請無多,如果條件或條件邏輯,因爲有可能是無限的數據類型,我已經使用字符串這裏只是作爲一個例子,它可以是任何東西。
如果我理解正確的,你想知道類(型)的實例(對象)在運行時(現有),其中有無關泛型不過,因爲切赫解釋。
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
}
如果你想獲得s的運行時類型並在泛型中使用它,這是不可能的。 Java中的泛型僅在編譯時用於類型檢查和類型推斷。通用的信息在運行時被刪除,因此運行時無法區分List<String>
和List<Integer>
之間的差異。
如果你只是想爲s編譯時知道類型而不是通用的,因爲你已經知道s的類型,並且你可以爲它寫一個類名。
好吧有人真的給了一個非常接近的答案,現在刪除了回答:/那些尷尬的時刻..... – Eventor