我想创建一个除了其他方法签名之外的接口,它将具有这种类型的签名:
Set<Instruction> parse(String rawData);
在实现接口的类中,我想做一个实现:
Set<Instruction> parse(String rawData){
//Do work.
//return an object of type HashSet<DerivedInstruction>.
}
DerivedInstruction
扩展Instruction
抽象类的位置。
(指令也可以是一个界面,或者)。
我的观点不在于Collection类型(我知道HashSet实现Set),而是在泛型类型上。
通过搜索,我发现Set<Instruction>
和HashSet<SpecificInstruction>
扩展Object
类型,并且不通过继承关联(至少不直接)。因此,我无法在返回类型上转发HashSet<SpecificInstruction>
。关于如何做到这一点的任何想法?
谢谢。
答案 0 :(得分:7)
以下是一个示例,说明如何放宽parse
方法的类型约束:
Set<? extends Instruction> parse(String rawData) {
//....
}
完整的例子:
interface Instruction {}
class DerivedInstruction implements Instruction {}
Set<? extends Instruction> parse(String rawData){
return new HashSet<DerivedInstruction>();
}
答案 1 :(得分:1)
因此,我无法在返回类型上上传HashSet。任何想法 这该怎么做?谢谢。
然后你需要使用有界通配符的方法:Set<? extends Instruction>
。 ?
代表未知类型,实际上是Instruction
的子类型或Instruction
本身的类型。我们说Instruction
是通配符的上限。
Set<? extends Instruction> parse(String rawData){
//Do work.
//return an object of type HashSet<DerivedInstruction>.
}
了解此more here.