键入参数导致错误

时间:2014-01-22 22:06:03

标签: java multithreading generics collections type-parameter

我的课程如下: -

import java.util.*;
public class QueueTest<T>{

    Queue<T> q = new LinkedList<T>();
    int capacity;

    public QueueTest(int capacity){
        this.capacity = capacity;
    }

    **public <T> void put(T item) throws InterruptedException**{
        while(q.size()== capacity){
            System.out.println("Now Queue is full and i will wait");
            wait();
        }
        q.add(item);
        System.out.println("I added : "+item);
        notify();
    }

    public T got() throws InterruptedException{
        while(q.isEmpty()){
            System.out.println("Now Queue is empty and i will wait ");
            wait();
        }
        T item = q.remove();
        System.out.println("I got : "+item);
        notify();
        return item;
    }
}

方法声明 put()导致此错误?

QueueTest.java:17: error: no suitable method found for add(T#1)
                q.add(item);

当我删除 T 时,该类编译时没有错误,但我不知道为什么???

1 个答案:

答案 0 :(得分:3)

摆脱

中的T
public <T> void put(T item) throws InterruptedException{
        ^

如果你离开它,你就会声明一个不同的类型变量,它会影响你的类'变量T。您可以将不同的类型绑定到此类型,因此编译器无法保证它与绑定到Queue的类型相同。您似乎想要使用与类声明中相同的类型变量。