我有以下代码:
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>>();
。
也许我只是以错误的方式解决问题?
提前致谢。
答案 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)
在您的数组列表中,您将Number
和String
放在一起。
即。您要在数组列表中添加对象,因此其类型应为Object
因为它是java中所有类的parent
。
List<Coordinate<Object>> location = new ArrayList<Coordinate<Object>>();