无法对éžé™æ€ç±»åž‹T进行é™æ€å¼•ç”¨

时间:2017-07-29 10:53:12

标签: java generics

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

我在å°è¯•åˆ›å»ºé€šç”¨Arraylistæ—¶é‡åˆ°é”™è¯¯ï¼Ÿ

3 个答案:

答案 0 :(得分:2)

这是有é“ç†çš„。想想Tçš„å«ä¹‰ - 您定义的是æ¯ä¸ªå®žä¾‹æŒ‡å®šå…¶é€šç”¨å…·ä½“类型的类。

然而é™æ€æˆå‘˜å±žäºŽç±»è€Œä¸æ˜¯ç‰¹å®šå®žä¾‹ã€‚当你在其中定义一个é™æ€æˆå‘˜æ—¶ï¼Œè¿™å–决于这样的T它会是什么?é™æ€æ²¡æœ‰å®žä¾‹ - 所以T。

如果您希望queueæˆä¸ºè¯¥å®žä¾‹çš„æˆå‘˜ï¼Œå¹¶ä¾èµ–于T,请删除static:

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

答案 1 :(得分:2)

类的Tå‚数化类型与类的实例相关è”,而ä¸ä¸Žç±»æœ¬èº«ç›¸å…³è”,但static是类而ä¸æ˜¯å®žä¾‹ä¿®é¥°ç¬¦ã€‚
因此,编译器ä¸æŽ¥å—您从é™æ€å­—段/方法引用T。

定义泛型类是利用实例指定的泛型的基础 因此删除é™æ€modifier更有æ„义:

public class BlockingQueue<T> {

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

}

答案 2 :(得分:0)

我å‘现错误我试图创建é™æ€å¼•ç”¨ï¼Œæˆ‘错过了。下é¢çš„工作代ç ã€‚谢谢@chrylis

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