2016-03-01 105 views
1
public class XYZ { 
     public static void main(String[] args) { 

     C<A> c = new D<A>(); 

一個有效的替代品得到錯誤:::界不匹配:類型A是不是有界參數的有效替代<Ť延伸乙<Ť > > C型<T>。我究竟做錯了什麼? }Java泛型界不匹配:該類型是不是有界參數

} 

    class D<T extends B<T>> implements C<T>{ 
     @Override 
     public void ok(T b) { 
     System.out.println(b.getId()); 
     } 
    } 

    interface C<T extends B<T>>{ 
     void ok(T b); 
    } 

    class A extends B<String>{ 
    } 

    class B<T>{ 
     private T id; 

     public T getId() { 
     return id; 
     } 

     public void setId(T id) { 
     this.id = id; 
     } 

    } 

回答

2

你必須使用通配符B<?>。問題是C<T extends B<T>>。你給C和B類型T。但是你聲明C<A>。所以在你的情況下,B也得到A類型,但是你的代碼是class A extends B<String>,其中B必須是StringD中的相同問題。希望我的回答很明確。

下面的代碼應該爲你工作:

public static void main(String[] args) { 

    C<A> t = new D<A>(); 
} 

static class D<T extends B<?>> implements C<T> { 
    @Override 
    public void ok(T b) { 
     System.out.println(b.getId()); 
    } 
} 

interface C<T extends B<?>> { 
    void ok(T b); 
} 

static class A extends B<String> { 
} 

static class B<T> { 
    private T id; 

    public T getId() { 
     return id; 
    } 

    public void setId(T id) { 
     this.id = id; 
    } 

}