Skl*_*vvz 24 c# java oop language-features language-design
有没有办法强制(子)类在C#或Java中使用具有特定签名或特定静态方法的构造函数?
你不能明显地使用接口,我知道它的用途有限.我发现它有用的一个实例是当你想强制执行一些设计指南时,例如:
例外
他们应该都有四个规范构造函数,但没有办法强制执行它.你必须依靠像FxCop(C#case)之类的工具来捕获它们.
运算符
没有合约指定可以求和两个类(在C#中使用operator +)
是否有任何设计模式可以解决这个限制?在未来版本的C#或Java中,可以在语言中添加哪些构造来克服此限制?
在编译时没有强制执行,但我花了很多时间研究类似的问题; 一个支持泛型的数学库,以及一个有效的(非默认的)ctor API都可以在MiscUtil中使用.但是,这些仅在运行时首次使用时进行检查.实际上这不是一个大问题 - 您的单元测试应该很快找到任何缺少的操作符/ ctor.但它很有效,但很快......
您可以使用Factory模式.
interface Fruit{}
interface FruitFactory<F extends Fruit>{
F newFruit(String color,double weight);
Cocktail mixFruits(F f1,F f2);
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以为任何类型的Fruit创建类
class Apple implements Fruit{}
class AppleFactory implements FruitFactory<Apple>{
public Apple newFruit(String color, double weight){
// create an instance
}
public Cocktail mixFruits(Apple f1,Apple f2){
// implementation
}
}
Run Code Online (Sandbox Code Playgroud)
这并不强制您不能以使用Factory的方式创建实例,但至少可以指定要从Factory请求的方法.