Java代碼:強制泛型類型Java中的財產申報
class First {}
class Second extends First {}
class Jinkies<T> {}
interface Greeting<T> {}
class Hello<U extends T, T> implements Greeting<T> {
private Map<Jinkies<U>, List<U>> scooby;
}
在scooby
的聲明,既Jinkies
和List
具有相同類型的參數 - 這就是我想要執行什麼。有沒有辦法實現這一目標在Java中,而不必訴諸Hello
類的聲明列出兩個參數(U
和T
)?
我想只有一個 - 例如像這樣:
class Hello<U extends T> implements Greeting<T>
但是,這不會編譯。我有寫:的
new Hello<Second, First>()
代替:
new Hello<Second>()
即使我沒有在Hello
身體關心First
任何地方(也沒有的Hello
的用戶)。
編輯 - 如@LouisWasserman解釋了評論,對我而言上面壞榜樣。也許澄清 - 比方說,我一直想做的事:
new Hello<First>()
但隨後能夠使用任何U
其中U extends First
(即First
或在上面的例子中Second
)在整個Hello
身體沒有照顧First
與確保U
始終是相同的。也就是說,如果我有兩種方法:
void method1(U a) {}
void method2(U b) {}
我希望能夠執行第一種方法的U
是一樣的第二種方法的U
- 但不關心什麼是(即First
或Second
),只要它是相同的。
<U extends T> void method1(U a) {}
<U extends T> void method2(U b) {}
是行不通的,因爲我可以打電話給method1(first)
和method2(second)
。
編輯 - 通過思考這一點,這可能是行不通的其他方式。即如果只指定一個邊界,就可以用另一種方式。因此,如果只指定First
,我可以「向下轉換」到Third
。如果只指定Second
,我可以「上傳」到Zero
。回到實驗室...
如果你寫了'新的你好',那麼它會實現什麼'Greeting '?你怎麼知道的?這聽起來像'問候'根本不應該有'T'。 –
2014-10-10 19:16:46
@LouisWasserman'問候'由於其他原因需要'T'。我同意'新的你好()'不會出於你提到的原因 - 我的一個壞榜樣。編輯澄清。 –
2014-10-10 19:49:19