2

我想创建一个接口,除了其他方法签名之外,它将具有这种类型的签名:

Set<Instruction> parse(String rawData);

在实现接口的类中,我想做一个实现:

 Set<Instruction> parse(String rawData){
   //Do work.
   //return an object of type HashSet<DerivedInstruction>.
 }

WhereDerivedInstruction扩展了Instruction抽象类。(指令也可以是一个接口,或者)。

我的观点不是关于 Collection 类型(我知道 HashSet 实现了 Set),而是关于泛型类型。通过搜索,我发现两者都Set<Instruction>扩展HashSet<SpecificInstruction>Object类型,并且没有通过继承关联(至少不是直接关联)。因此,我不能HashSet<SpecificInstruction> 对返回类型表示不满。关于如何做到这一点的任何想法?谢谢你。

4

2 回答 2

8

这是一个如何放宽parse方法的类型约束的示例:

Set<? extends Instruction> parse(String rawData) {
    //....
}

完整的例子:

interface Instruction {}
class DerivedInstruction implements Instruction {}

Set<? extends Instruction> parse(String rawData){
    return new HashSet<DerivedInstruction>();
}
于 2013-11-14T13:43:37.800 回答
1

因此,我不能在返回类型上向上转换 HashSet。关于如何做到这一点的任何想法?谢谢你。

然后你需要使用有界通配符的手段:Set<? extends Instruction>. ?代表未知类型,它实际上是其自身的子类型或Instruction类型Instruction。我们说这Instruction是通配符的上限。

Set<? extends Instruction> parse(String rawData){
   //Do work.
   //return an object of type HashSet<DerivedInstruction>.
 }

在此处阅读更多信息。

于 2013-11-14T13:49:37.857 回答