为什么要使用空的抽象类而不是接口?

杰罗姆·坎斯(Jerome Cance):

我使用GWT和“地点与活动”机制。

很可悲的是Place是一个类,因为我的自定义位置无法扩展另一个类。

当我查看地方代码时,会看到以下内容:

public abstract class Place {

  /**
   * The null place.
   */
  public static final Place NOWHERE = new Place() {
  };

}

由此可见,地方可以是一个界面。GWT团队选择将Place设置为抽象类而不是接口是有充分的理由吗?

概括地说:是否有充分的理由创建真正空的抽象类vs接口?

托马斯·布罗耶:

Place虽然说不清(尽管我有一些想法,请参阅下文),但已针对以下内容进行了讨论Activityhttps : //groups.google.com/d/topic/google-web-toolkit-contributors/V8rhZHiXFRk /讨论

就我们的历史而言,Place一直是 GWT中的抽象类(和FWIW,此NOWHERE位置添加很久了;请注意,此提交引用了Wave,很快就会从互联网上消失,在那里我们看到interface Place了)他们在设计API的某个时间点的接口)。

鉴于PlaceHistoryGenerator(在您使用时GWT.create()使用PlaceHistoryMapper)查看场所层次结构,拥有一个抽象类可以减少很多边缘情况!
想象一下您的PlaceHistoryMapper引用a PlaceTokenizers<Foo>PlaceTokenizer<Bar>您有一个class FooBar implements Foo, Bar { },应该使用哪个标记器?如果您没有FooBar在您的表中明确引用该类PlaceHistoryMapper,生成器看不到它(或者宁愿不看它),那么它应该生成哪种代码?并记住我们所有人都希望确定性,因此生成的代码应始终相同。使用一个类,生成器可以按其继承树对它们进行排序(从最具体的-最派生的-到最不具体的),并可以安全地假定没有类的特定继承关系的2个地方是完全不同的,因此它们可以instanceof以任何顺序检查(在生成的代码中),并且仍然提供稳定的结果⇒确定性。

免责声明:我是一个报告订购问题然后提供补丁的人,但是Place已经是一堂课。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章