2017-07-29 88 views
0
public class BlockingQueue<T> { 
    public static List<T> queue =new ArrayList<T>(); 
} 

我在尝试创建通用Arraylist时出现错误?无法对非静态类型进行静态引用T

+4

。工作代码,你明白什么静态手段?如果是这样,请解释在这里使用它的原因。 – chrylis

+1

为了完整起见,您正在尝试执行的正确语法是'public static List queue = new ArrayList ;',但从语义上来说,您真的不想在这里使用静态字段。 – EJP

回答

2

这很有道理。想想T的含义 - 您正在定义一个类,其中每个实例指定其通用的具体类型。

但是静态成员属于类而不是一个特定的实例。当你在其中定义一个静态成员时,这取决于这样的T它会是什么?静态没有实例 - 那么什么T

如果你想在queue是实例的成员,并依靠T只是删除static

public class BlockingQueue<T> { 
    public List<T> queue = new ArrayList<T>(); 
} 
2

一类的T参数化类型相关联的类的实例,而不是到类本身,但static是一个类,而不是实例修饰符。
所以编译器不接受你从静态字段/方法引用T

定义泛型类利用了实例指定的泛型。
因此,移除静态modifier更有意义:

public class BlockingQueue<T> { 

    public List<T> queue = new ArrayList<T>(); 

} 
0

我发现我试图创建静态引用错误,我错过了,下面.Thanks @chrylis

public class BlockingQueue<T> { 
    public List<T> queue =new ArrayList<T>(); 
} 
相关问题