|
44
|
| Jean-Philippe Pellet · 技术社区 · 15 年前 |
|
|
1
58
这是什么
如您所见,setoption返回实际使用的类型,而不是abstract0。如果混凝土0
更新:在评论中回答JPP的后续问题(如何返回新实例: 问题中描述的一般方法是正确的方法(使用抽象类型)。但是,对于每个子类,新实例的创建需要是明确的。 一种方法是:
另一个方法是遵循scala集合库中使用的构建器模式。也就是说,setoption接收一个隐式构建器参数。这样做的好处是,构建新实例可以使用更多的方法,而不仅仅是“复制”,而且可以完成复杂的构建。例如,setSpecialOption可以指定返回实例必须是SpecialConcrete。 下面是解决方案的示例:
更新2: 回复JPP的第二条评论。对于多个层次的嵌套,使用类型参数而不是类型成员,并将abstract0转换为特征:
|
|
|
2
4
这是
|