2013-06-19 122 views
3

我在抓取泛型時遇到了一些麻煩。我已經閱讀了Oracle關於泛型的教程,它似乎沒有解決我的問題。我也不知道在尋找答案時要尋找什麼。實現方法的Java類,其參數在接口中指定的子類型

比方說,我有以下代碼:

public abstract class Buff<V> { 
    public V value; 
{ 

public interface Buffable<V> { 
    public void buff(Buff<V extends Buff> buff); 
} 

public class DoubleBuff extends Buff<double> { 
    public double value; 
} 

public class DoubleBuffable implements Buffable<DoubleBuff> { 
    public void Buff(DoubleBuff buff) { 
     //implementation 
    } 
} 

我希望能夠創建一個繼承淺黃色,並有成員「價值」類,但指定值的類型(見DoubleBuff)。我還想定義使用Buff子類型的輸入參數實現buff方法的類。

DoubleBuffable是一些類,它實現Buffable,但預計的DoubleBuff和不StringBuff的輸入。

我是否正確表達我的泛型?

回答

5

首先,語法。聲明:

public interface Buffable<V> { 
    public void buff(Buff<V extends Buff> buff); 
} 

應該是:

public interface Buffable<V extends Buff> { 
    public void buff(Buff<V> buff); 
} 

你想要的類型變量,應在類聲明中指定。

但是你說:

我也想定義實現使用輸入參數是淺黃色的子類型的BUFF方法類。

這樣,下面的聲明會適合您的發言更好:

public interface Buffable<V extends Buff<?>> { 
    public void buff(V buff); 
} 

你可能想,如果你需要一個更具體的類型的Buff改變這種<?>一部分。

最後,其他必要的變化和最後類:

public abstract class Buff<V> { 
    public V value; 
} 
public interface Buffable<V extends Buff<?>> { 
    public void buff(V buff); 
} 
// instead of primitive types, you should use their wrappers: double-->Double 
public class DoubleBuff extends Buff<Double> { 
    public double value; 
} 
public class DoubleBuffable implements Buffable<DoubleBuff> { 
    public void buff(DoubleBuff buff) { 
     //implementation 
    } 
} 
+0

感謝您的幫助。 – user2501337

2

基元不能用作泛型類型。嘗試「雙」而不是「雙」。

相關問題