我使用GWT和“地点与活动”机制。
很可悲的是Place是一个类,因为我的自定义位置无法扩展另一个类。
当我查看地方代码时,会看到以下内容:
public abstract class Place {
/**
* The null place.
*/
public static final Place NOWHERE = new Place() {
};
}
由此可见,地方可以是一个界面。GWT团队选择将Place设置为抽象类而不是接口是有充分的理由吗?
概括地说:是否有充分的理由创建真正空的抽象类vs接口?
我Place
虽然说不清(尽管我有一些想法,请参阅下文),但已针对以下内容进行了讨论Activity
:https : //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
以任何顺序检查(在生成的代码中),并且仍然提供稳定的结果⇒确定性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句