簡體   English   中英

適合在數組列表中使用的泛型

[英]suitable generics to use in an arraylist

我正在使用一個Arraylist來保存異構數據... Stringintclass對象的混合(這些對象可以是我定義的任何類的實例。)。 我已經將ArrayList初始化為ArrayList<Object> = new ArrayList<Object>

但是我想我已經聽過ppl說直接引用對象是……。 壞/不可取? 我指的是對象,因為找不到適合我的情況的泛型。 可以使用還是有合適的泛型? (我對Java比較陌生)

為每種類型使用不同的列表,並將這些列表保留在地圖中,您可以使用class對象作為鍵,這樣它就不會混淆並且易於訪問。

 Map<Class<?>,List<?>> map = new HashMap<Class<?>,List<?>>();
 map.put(String.class, new ArrayList<String>());
 map.put(Integer.class, new ArrayList<Integer>());
 map.put(Class.class, new ArrayList<Class<?>>());

編輯:

PS:如果要將新對象添加到列表中,則從地圖上檢索列表時,仍然會收到未經檢查的警告。

public static void main(String[] args) {
        Map<Class<?>,List<?>> map = new HashMap<Class<?>,List<?>>();
        map.put(String.class, new ArrayList<String>());
        map.put(Integer.class, new ArrayList<Integer>());
        map.put(Class.class, new ArrayList<Class<?>>());

        String str = "deneme";

        @SuppressWarnings("unchecked")
        List<String> strList =  (List<String>) map.get(String.class);
        strList.add(str);
        strList.add("str2");
        strList.add("str2");

        @SuppressWarnings("unchecked")
        List<Class<?>> classList =  (List<Class<?>>) map.get(Class.class);
        classList.add(String.class);
        classList.add(Integer.class);
        classList.add(Double.class);


        for(String currentStr:strList){
            System.out.println(currentStr);
        }
    }

每當將Object用作通用分類器時,您最終都會遇到很多丑陋的語句,例如

if (elem instanceOf String)
else if (elem instanceOf Integer)

等等。 通常,最好為每個列表使用單獨的列表,例如,

List<String> strings = new LinkedList<String>();
List<Integer> ints = new LinkedList<Integer>();

因此,我建議您重新設計程序,以更好地利用Java促進的功能。

如果您事先不了解目標對象的類型,則確實不需要使用泛型。

編譯器可能會發出警告,但是好人在這種邪惡中能做什么!

注意 :實際上,您可以使用無界通配符和通配符來忽略該警告,但是我不確定它是否會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM