문제

I have this class as follows :-

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;
    }
}

the declaration of method put() cause this error ??

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

and when I remove T , the class compiled without errors, but I don't know why ???

도움이 되었습니까?

해결책

Get rid of the T in

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

If you leave it, you are declaring a different type variable that is shadowing your class' type variable T. You can bind a different type to this one, so the compiler cannot guarantee that it will be the same as the one bound to the Queue. You seem to want to use the same type variable as the one the in the class declaration.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top