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);
}
}