我正在研究一个稀疏矩阵类,需要使用一个数组LinkedList来存储矩阵的值.阵列的每个元素(即每个元素LinkedList)代表矩阵的一行.并且,LinkedList数组中的每个元素代表一列和存储的值.
在我的课堂上,我有一个数组的声明:
private LinkedList<IntegerNode>[] myMatrix;
Run Code Online (Sandbox Code Playgroud)
并且,在我的构造函数中SparseMatrix,我尝试定义:
myMatrix = new LinkedList<IntegerNode>[numRows];
Run Code Online (Sandbox Code Playgroud)
我最终得到的错误是
无法创建通用数组
LinkedList<IntegerNode>.
所以,我有两个问题:
IntegerNode是我创建的一个类.并且,我的所有类文件都打包在一起.
我可以使用泛型声明一个地图数组来指定地图类型:
private Map<String, Integer>[] myMaps;
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚如何正确实例化它:
myMaps = new HashMap<String, Integer>[count]; // gives "generic array creation" error
myMaps = new HashMap[count]; // gives an "unchecked or unsafe operation" warning
myMaps = (Map<String, Integer>[])new HashMap[count]; // also gives warning
Run Code Online (Sandbox Code Playgroud)
如何在不收到编译器错误或警告的情况下实例化此数组映射?
更新:
谢谢大家的回复.我最终得到了List建议.
以下是什么解释:
public class GenericsTest {
//statement 1
public ArrayList<Integer>[] lists;
public GenericsTest()
{
//statement 2
lists = new ArrayList<Integer>[4];
}
}
Run Code Online (Sandbox Code Playgroud)
编译器接受语句1.语句2由编译器标记为"通用数组创建".
我已经看到一个关于禁止泛型数组的一个很好的解释是这个,认为由于数组是协变的,而泛型不是你可以破坏泛型类型,如果你允许泛型数组.
撇开关于这种语言是否应该极端地在泛型的处理方面造成这种复杂的不一致性的争论,无论你怎么努力都不让自己开枪(如果有人知道关于亲戚的任何好的讨论)问题的优点/缺点请发帖,我有兴趣看看论点),如果(2)不是,为什么要声明(1)?
在Java 7中,您可以选择放置@SafeVarargs注释以抑制在使用不可重新生成的varargs参数编译方法时获得的警告.Project Coin的提议规定,当方法确保只有与varargs参数相同类型的元素存储在varargs数组中时,才应使用注释.
什么是非安全方法的例子?
可能重复:
Java泛型和数组初始化
如何在Java中实例化地图数组?
我知道我能做到:
Map<String, Object> map = new HashMap<String, Object>();
Run Code Online (Sandbox Code Playgroud)
所以我应该能够:
Map<String, Object>[] maps = new HashMap<String, Object>[10];
Run Code Online (Sandbox Code Playgroud)
但这不起作用,给出编译问题.