Java 泛型类的Arraylist

Java 泛型类的Arraylist,java,generics,arraylist,Java,Generics,Arraylist,我想从列表中访问泛型对象,但总是收到不兼容的typs错误消息 MyGenericContainer <Cursor> cursorContainer = new MyGenericContainer<Cursor>(c); ArrayList <MyGenericContainer> arrayList = new ArrayList<MyGenericContainer>(); arrayList.add(cursorContainer); Cu

我想从列表中访问泛型对象,但总是收到不兼容的typs错误消息

MyGenericContainer <Cursor> cursorContainer = new MyGenericContainer<Cursor>(c);
ArrayList <MyGenericContainer> arrayList = new ArrayList<MyGenericContainer>();
arrayList.add(cursorContainer);
Cursor cursor = arrayList.get(0).getValue();
MyGenericContainer cursorContainer=新的MyGenericContainer(c);
ArrayList ArrayList=新的ArrayList();
arrayList.add(游标容器);
Cursor Cursor=arrayList.get(0.getValue();

一般来说,有没有一种方法可以将泛型对象放到列表中并访问每个对象(无需强制转换)?

在创建arraylist时,您是否遗漏了一些内容

像这样改变它,我想应该可以很好地工作:

ArrayList <MyGenericContainer<Cursor>> arrayList = new ArrayList<MyGenericContainer<Cursor>>();
ArrayList ArrayList=new ArrayList();

您在创建arraylist时是否遗漏了一些内容

像这样改变它,我想应该可以很好地工作:

ArrayList <MyGenericContainer<Cursor>> arrayList = new ArrayList<MyGenericContainer<Cursor>>();
ArrayList ArrayList=new ArrayList();

您正在设置使用原始
MyGenericContainer
键入的
ArrayList
。因此,编译器意味着
ArrayList
将由
MyGenericContainer
Object
实例组成

为了修复它,您需要设置
MyGenericContainer
type的type参数:

List<MyGenericContainer<Cursor>> arrayList = new ArrayList<MyGenericContainer<Cursor>>();
List arrayList=new arrayList();
如果您使用的是Java7+,那么您可以利用菱形(
),这将允许您键入不太详细的声明:

List<MyGenericContainer<Cursor>> arrayList = new ArrayList<>();
List arrayList=new arrayList();

您正在设置使用原始
MyGenericContainer
键入的
ArrayList
。因此,编译器意味着
ArrayList
将由
MyGenericContainer
Object
实例组成

为了修复它,您需要设置
MyGenericContainer
type的type参数:

List<MyGenericContainer<Cursor>> arrayList = new ArrayList<MyGenericContainer<Cursor>>();
List arrayList=new arrayList();
如果您使用的是Java7+,那么您可以利用菱形(
),这将允许您键入不太详细的声明:

List<MyGenericContainer<Cursor>> arrayList = new ArrayList<>();
List arrayList=new arrayList();

我想你可能想补充一点,他可以使用菱形操作符;没有必要重复类型信息。谢谢,@Jägermeister,我会的。谢谢你的回答。但我通常希望将来自不同类的对象放在列表中,比如:
new ArrayList ArrayList=new ArrayList();添加(新字符串());add(新整数());int a=arrayList.get(1)//需要强制转换
我想用泛型解决这个问题(不需要强制转换)。如果你想放置不同类型的对象,那么你必须进行强制转换,因为编译器无法知道你在运行时将放置什么对象。@logerom你可以要它,但它不能实现这一点。你必须进行强制转换,或者更好,用正确类型的字段编写你自己的类,而不是像你试图做的那样滥用ArrayList;没有必要重复类型信息。谢谢,@Jägermeister,我会的。谢谢你的回答。但我通常希望将来自不同类的对象放在列表中,比如:
new ArrayList ArrayList=new ArrayList();添加(新字符串());add(新整数());int a=arrayList.get(1)//需要强制转换
我想用泛型解决这个问题(不需要强制转换)。如果你想放置不同类型的对象,那么你必须进行强制转换,因为编译器无法知道你在运行时将放置什么对象。@logerom你可以要它,但它不能实现这一点。您将不得不执行强制转换,或者更好地使用正确类型的字段编写您自己的类,而不是像您试图做的那样滥用ArrayList。