【发布时间】:2015-08-08 15:47:23
【问题描述】:
假设我有一些实体类层次结构,并且我有一个 util 类,该类具有一个获取上层类层次结构的方法,并且必须根据我的特定类对另一个实体类(之前的层次结构之外)进行一些更改得到 。 所以我将使用 instanceof 来查找我得到的特定对象。 但我知道 : 任何时候你发现自己在编写“如果对象是 T1 类型,则做某事,但如果它是 T2 类型,则做其他事情”形式的代码,给自己一记耳光。 那么不使用 instanceof 怎么办呢?
请注意,我不想将 util 方法放在实体类中,因为我希望用户(实现者程序员)能够实现该方法,但我不希望他们能够更改实体。
【问题讨论】:
-
您可能会考虑让所有“候选”类派生自一个定义 getType() 方法的类或接口,可能会返回带有可能选项的枚举类型。奖励:您可以在 switch() {} 块中使用该枚举,性能更高...这种模式很常见。
-
通过使用多态性。这就是它存在的原因。
-
如果出于某种原因您不想使用多态性并希望同时避免使用 instanceof,那么访客模式可能有用吗?
-
请注意,我不想将 util 方法放在实体类中,因为我希望用户(实现者程序员)能够实现该方法,但我不希望他们能够更改实体。
标签: java polymorphism overriding instanceof