2012-03-07 76 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>