java中泛型对象的ArrayList。未选中调用'Class(T)'作为原始类型'Class'的成员

时间:2015-01-09 11:00:58

标签: java arraylist

我有以下代码:

public class Coordinate<T>{
T coordinate;
//rest of class
}

然后我尝试创建一个包含各种坐标的ArrayList,如下所示:

ArrayList<Coordinate> location = new ArrayList<Coordinate>();

最后我为位置添加了一些坐标

location.add(new Coordinate(0));
location.add(new Coordinate("A"));
location.add(new Coordinate(0.1f));

这些location.add()调用给了我以下警告:

  

取消选中&#39; Coordinate(T)&#39;作为原始类型的成员&#39; Coordinate&#39;

我已经搜索了这个警告并发现了一些命中,但我无法从这些答案中找出我如何使我的应用程序工作,因为我希望ArrayList位置能够容纳不同类型的坐标,所以我不能做像

这样的事情

ArrayList<Coordinate<Integer>> location = new ArrayList<Coordinate<Integer>>();

也许我只是以错误的方式解决问题?

提前致谢。

2 个答案:

答案 0 :(得分:2)

如果你想只混合数字,可以使用以下代码(<>是Java 7及以后版本的钻石,对于早期版本,没有类型推断。)

List<Coordinate<? extends Number>> location = new ArrayList<>();
location.add(new Coordinate<>(1));
location.add(new Coordinate<>(1.0));

如果您想使用各种对象,可以使用以下内容:

List<Coordinate<?>> location = new ArrayList<>();
location.add(new Coordinate<>(1));
location.add(new Coordinate<>("Hello"));

由于您创建了没有泛型参数的Coordinate对象,因此您收到了警告。

new Coordinate(0) -> Unchecked call to 'Coordinate(T)' as a member of raw type 'Coordinate'

通过将Coordinate的创建更改为new Coordinate<>(1)或任何类型,您可以避免此问题。

答案 1 :(得分:0)

在您的数组列表中,您将NumberString放在一起。

即。您要在数组列表中添加对象,因此其类型应为Object

因为它是java中所有类的parent

List<Coordinate<Object>> location = new ArrayList<Coordinate<Object>>();