由于Java泛型的实现,您不能拥有这样的代码:
public class GenSet<E> {
private E a[];
public GenSet() {
a = new E[INITIAL_ARRAY_LENGTH]; // error: generic array creation
}
}
Run Code Online (Sandbox Code Playgroud)
如何在保持类型安全的同时实现这一点?
我在Java论坛上看到了这样的解决方案:
import java.lang.reflect.Array;
class Stack<T> {
public Stack(Class<T> clazz, int capacity) {
array = (T[])Array.newInstance(clazz, capacity);
}
private final T[] array;
}
Run Code Online (Sandbox Code Playgroud)
但我真的不知道发生了什么.
好吧,我写了一些代码,我所做的只是循环,但改变了我调用的方法.我尝试使用for循环,所以它有点整洁(出于好奇,看看是否可以完成),但是当我这样做时它不会编译,因为它无法识别一个项目我想,数组作为一种方法.这就是我所拥有的:
String[] moveArray = {moveRight,moveDown,moveLeft,moveUp};
for (i = 0; i < 4; i++) {
while (myWumpus.moveArray[i]) {
myWumpus.moveArray[i];
generator.updateDisplay();
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译时,我得到了
not a statement myWumpus.moveArray[i]();
';' expected myWumpus.moveArray[i]();
Run Code Online (Sandbox Code Playgroud)
(它指的是while循环中的第一个语句)
所以,我认为这可能是因为我正在使它成为String类型的数组?有类型方法吗?这是可能吗?任何解决方案欢迎:).此外,我可以使用4 while循环来使其工作,因此您无需向我展示该解决方案.谢谢!
这似乎是一个基本问题,但它确实让我很困惑.我试图表示图的邻接列表.我有两个问题:
public class Graph
{
private final int V;
private List<Integer>[] adj;
public Graph(int V)
{
this.V = V;
this.adj = (List<Integer>[]) new LinkedList[V]; // this works
}
}
Run Code Online (Sandbox Code Playgroud)
问题1:当我执行以下操作时,它会出错
Array type expected; found: 'java.util.LinkedList<java.lang.Integer>'
this.adj = (List<Integer>[]) new LinkedList<Integer>()[V];
Run Code Online (Sandbox Code Playgroud)
我正在创建一个Integer数组列表,对吧?
问题2:当我这样做时,它再次给出了一个错误,说明通用数组的创建:
this.adj = (List<Integer>[]) new LinkedList<Integer>[V];
Run Code Online (Sandbox Code Playgroud)
最后两种方法有什么问题?我认为第一个更正确.