我对Java有点新鲜,但我真的很困惑为什么这两个"相当于"语句引发不同的错误:
public class SampleArray<T> implements Grid<T> {
public int x;
public int y;
private List<List<T>> grid = new ArrayList<List<T>>();
public SampleArray(int x, int y) {
this.x = x;
this.y = y;
}
}
这很好,从理解它实例化一个接受泛型类型T并具有属性x,y的类,以及一个采用List和T的私有属性List
public class SampleArray<T> implements Grid<T> {
public int x;
public int y;
private List<List<T>> grid;
public SampleArray(int x, int y) {
this.x = x;
this.y = y;
List<List<T>> this.grid = new ArrayList<List<T>>();
}
}
这给了我一个错误,特别是:
Syntax Error insert ";" to complete LocalVariableDeclarationStatement;
Syntax Error insert "VariableDelarators" to complete LocalVariableDeclaration
在T>> this.grid
处的尖括号旁边。为什么我收到此错误?它们不相同,只是一个在不同的地方被实例化?接口Grid只是一个通用接口
答案 0 :(得分:6)
第二段代码语法错误。初始化this.grid
时,不应重新指定数据类型;编译器会认为您正在声明一个局部变量,并且this
不能用于创建局部变量。
删除变量上的数据类型。
this.grid = new ArrayList<List<T>>();
答案 1 :(得分:3)
你再次在构造函数中定义网格。试试这个
public SampleArray(int x, int y) {
this.x = x;
this.y = y;
this.grid = new ArrayList<List<T>>();
}
代替。它会将您的类中的网格声明为私有字段。初始化在构造函数中完成。
该行
private List<List<T>> grid = new ArrayList<List<T>>();
在一个回合中定义和初始化网格。