public class BlockingQueue<T> {
public static List<T> queue =new ArrayList<T>();
}
我在尝试创建通用Arraylist
时出现错误?无法对非静态类型进行静态引用T
public class BlockingQueue<T> {
public static List<T> queue =new ArrayList<T>();
}
我在尝试创建通用Arraylist
时出现错误?无法对非静态类型进行静态引用T
这很有道理。想想T
的含义 - 您正在定义一个类,其中每个实例指定其通用的具体类型。
但是静态成员属于类而不是一个特定的实例。当你在其中定义一个静态成员时,这取决于这样的T
它会是什么?静态没有实例 - 那么什么T
。
如果你想在queue
是实例的成员,并依靠T
只是删除static
:
public class BlockingQueue<T> {
public List<T> queue = new ArrayList<T>();
}
一类的T
参数化类型相关联的类的实例,而不是到类本身,但static
是一个类,而不是实例修饰符。
所以编译器不接受你从静态字段/方法引用T
。
定义泛型类利用了实例指定的泛型。
因此,移除静态modifier
更有意义:
public class BlockingQueue<T> {
public List<T> queue = new ArrayList<T>();
}
我发现我试图创建静态引用错误,我错过了,下面.Thanks @chrylis
public class BlockingQueue<T> {
public List<T> queue =new ArrayList<T>();
}
。工作代码,你明白什么静态手段?如果是这样,请解释在这里使用它的原因。 – chrylis
为了完整起见,您正在尝试执行的正确语法是'public static List queue = new ArrayList ;',但从语义上来说,您真的不想在这里使用静态字段。 –
EJP