当前位置:  开发笔记 > 编程语言 > 正文

你如何强制构造函数签名和静态方法?

如何解决《你如何强制构造函数签名和静态方法?》经验,为你挑选了3个好方法。

有没有办法强制(子)类在C#或Java中使用具有特定签名或特定静态方法的构造函数?

你不能明显地使用接口,我知道它的用途有限.我发现它有用的一个实例是当你想强制执行一些设计指南时,例如:

例外
他们应该都有四个规范构造函数,但没有办法强制执行它.你必须依靠像FxCop(C#case)之类的工具来捕获它们.

运算符
没有合约指定可以求和两个类(在C#中使用operator +)

是否有任何设计模式可以解决这个限制?在未来版本的C#或Java中,可以在语言中添加哪些构造来克服此限制?



1> Jon Skeet..:

使用泛型,您可以强制类型参数具有无参数构造函数 - 但这是关于它的限制.

除了泛型之外,实际使用这些限制即使它们存在也很棘手,但它有时对类型参数/参数有用.允许接口(或可能是静态接口)中的静态成员同样可以帮助解决"通用数字运算符"问题.

我写了一篇关于这个面临着类似的问题,当一小会儿前.



2> Marc Gravell..:

在编译时没有强制执行,但我花了很多时间研究类似的问题; 一个支持泛型的数学库,以及一个有效的(非默认的)ctor API都可以在MiscUtil中使用.但是,这些仅在运行时首次使用时进行检查.实际上这不是一个大问题 - 您的单元测试应该很快找到任何缺少的操作符/ ctor.但它很有效,但很快......



3> jrudolph..:

您可以使用Factory模式.

interface Fruit{}

interface FruitFactory{
   F newFruit(String color,double weight);

   Cocktail mixFruits(F f1,F f2);
}

然后,您可以为任何类型的Fruit创建类

class Apple implements Fruit{}
class AppleFactory implements FruitFactory{
   public Apple newFruit(String color, double weight){
       // create an instance
   }
   public Cocktail mixFruits(Apple f1,Apple f2){
       // implementation
   }
}

这并不强制您不能以使用Factory的方式创建实例,但至少可以指定要从Factory请求的方法.

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有