泛型的私人实例化

时间:2015-10-19 17:02:19

标签: java generics

我对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只是一个通用接口

2 个答案:

答案 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>>();

在一个回合中定义和初始化网格。