Java 要在arraylist中使用的适当泛型

Java 要在arraylist中使用的适当泛型,java,arraylist,Java,Arraylist,我正在使用Arraylist来保存异构数据…混合了String、int和class对象(这些对象可以是我定义的任何类的实例)。我已将ArrayList初始化为ArrayList=new ArrayList 但我想我听过ppl说直接引用对象是不好的/不受欢迎的?我指的是对象,因为在我的案例中找不到任何合适的泛型。可以使用还是有合适的泛型?(我对Java比较陌生)如果事先不知道目标对象的类型,那么实际上不需要使用泛型 编译器可能会发出警告,但是好人在这种邪恶中能做什么呢 注意:实际上,您可以使用无界

我正在使用
Arraylist
来保存异构数据…混合了
String
int
class
对象(这些对象可以是我定义的任何类的实例)。我已将
ArrayList
初始化为
ArrayList=new ArrayList


但我想我听过ppl说直接引用对象是不好的/不受欢迎的?我指的是对象,因为在我的案例中找不到任何合适的泛型。可以使用还是有合适的泛型?(我对Java比较陌生)

如果事先不知道目标对象的类型,那么实际上不需要使用泛型

编译器可能会发出警告,但是好人在这种邪恶中能做什么呢


注意:实际上,您可以使用无界和通配符忽略警告,但我不确定它是否会有帮助。

无论何时将
对象
作为通用分类器,您都会得到许多丑陋的语句,如

if (elem instanceOf String)
else if (elem instanceOf Integer)
等等。通常情况下,最好为每一项使用单独的列表,例如

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

因此,我建议您重新设计您的程序,以便更好地利用java Fanclitates的特性

对每种类型使用不同的列表,并将这些列表保存在映射中,您可以使用类对象作为键,这样它就不会混淆,并且易于访问

 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<?>>());
Map>Map=newhashmap>();
put(String.class,newArrayList());
put(Integer.class,新的ArrayList());
map.put(Class.Class,新数组列表>());
String str=“deneme”;
@抑制警告(“未选中”)
List strList=(List)map.get(String.class);
strList.add(str);
添加strList.add(“str2”);
添加strList.add(“str2”);
@抑制警告(“未选中”)

列表你用这个列表做什么?我的第一直觉是,设计/意图可能存在缺陷,即使您所做的是完全“合法的”。我正在尝试返回此列表,任何其他检索此列表的方法都将提取其中的项目以供进一步处理。客户端将对此类列表的元素进行什么处理?它必须在没有任何特定类型知识的情况下执行此操作。这就是您的设计吗?我现在开始意识到,我的程序中确实存在设计缺陷……客户端将检索项目并显示到swt表中。您是否可以发布一个工作示例,以便更清楚地了解您为什么要像上面那样实施它上述场景。@Deepak在某一点上,你仍然会得到一个未经检查的施法警告,当你从地图中检索列表时,它将是列表,如果你是这个意思的话。Map只是以一种容易访问的方式保存列表,如果您不知道有多少以及何时需要一个未知类型的列表T。
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);
        }
    }