2010-03-30 50 views
8

我想創建一個具有兩個參數的類。一個應該被簡單地鍵入爲T.另一個應該被鍵入爲擴展T和SomeInterface<T>的東西。當我嘗試這與在Java中擴展T和SomeInterface <T>

public class SomeClass<T, S extends SomeInterface<T> & T> 

那麼Java與

抱怨「的類型T是不是一個接口;它不能被指定爲一個有界參數」

和如果相反,我試圖創建一個接口S採用

public interface TandSomeInterface<T> extends SomeInterface<T>, T 

那麼Java抱怨與

「不能將類型參數T稱爲超類型」

有什麼方法可以在Java中執行此操作嗎?我認爲你可以用C++做... ...?

+2

需要注意的是C++模板很多比Java泛型更強大。僅僅因爲它可以用C++來完成,並不意味着它可以用Java來完成。 – 2010-03-30 08:35:00

+0

相關:http://stackoverflow.com/a/13261667/697449 – 2013-01-23 03:25:51

回答

3

由於沒有保證T成爲接口的合同,您無法創建擴展類型參數T的接口。當然,不允許擴展類的接口。

+0

但是有什麼辦法可以繞過這個來獲得相同的效果嗎? – 2010-03-30 08:52:07

3

這個作品,如果你擴展接口,以及:

public class SomeClass<T extends I, S extends SomeInterface<T> & I> 

但也許它不正是你想要的......

相關問題