2012-03-07 53 views
1

我是跟蹤的東西和他們的主人一類在Java HashMap中,如何執行泛型類型是一個子類

public class Record<S,O> { //S - generic stuff, O - generic owner 
    HashSet<S> allStuffs; 
    HashMap<S, O> whoOwnsWhat; 
    // 
} 

我如何可以強制s必須是某一類的子類/接口。

謝謝。

編輯:。
我修改的記錄是「class Record<Stuff,O>"這裏的東西是一個抽象類,並得到了一個警告‘類型參數的東西是隱藏式的東西’

public class <S extends Stuff> Records<S,O>也得到了編譯投訴

+0

您正在編輯的是現在問的另一個問題。你可能想分開來問。另外,我認爲看到更多的代碼將有助於調試新的錯誤。 – smessing 2012-03-07 00:57:11

+0

我認爲這是因爲你正試圖在類級別和方法級別定義allStuffs。看看我的答案。 – Damian 2012-03-07 01:01:41

+0

public class Records {...}。 「public class 記錄 {...}」 - 不會爲suer編譯。顯示整個代碼。 – Damian 2012-03-07 01:08:14

回答

2

有擴展和超級關鍵字來定義Java泛型的邊界。

public class Record<S extends fooClassName,O> { 
HashSet allStuffs(fooClassName arg); // do not "override" S by putting S HashSet<S> allStuffs; 
HashMap whoOwnsWhat (fooClassName arg1, O arg2); 
} 
3
public <S extends CharSequence> S foo(S s){ 
    return null; 
} 

美國該類S必須擴展(是的子類)CharSequence

0

我確信,威肯SE將父類或接口作爲集合或映射的鍵或值。 通過這樣做,所有的子類和實現的接口類將可用於插入集合或映射。

HashMap<SuperClass, Interface>