【发布时间】:2009-07-16 13:30:37
【问题描述】:
我有一个关于技术和实现的问题,而不是要解决的实际问题。最近我创建了一个抽象类,我们称之为A,它定义了它的子类的共同行为。
我用它来构造几个子类 B、C 和 D,然后将它们传递给接受类型 A 的超类-子类结构之外的其他方法(因此能够处理所有 B、C 和 D)。
在 Java 中,我使用 instanceof 来检索真实类型,但最终我不得不对真实类型进行大量转换,这看起来很乱。有没有人对如何使代码更清洁有任何建议?
我尝试的一种方法是从超类的参数中重建子类类型的实例,这样我就可以使用它的实际类型来处理对象,从而避免类型转换。由于这些子类中的每一个都是单例(是的,它们保持状态),所以我觉得这样做没问题。这看起来像是一件糟糕的事情吗?
感谢任何回答的人,非常感谢!
编辑:我用斜体添加了进一步的说明。谢谢。
【问题讨论】:
-
嗨,我遇到了同样的问题,而且很难用谷歌搜索(我很幸运找到了它)。很长一段时间后,您的经验是否让您明确回答了这个问题?
-
尽量重载方法,这样你就永远不需要知道真正的类型。只要每个子类都有一个具有不同实现的通用方法,您就永远不需要知道真正的类型。例如如果我有抽象类 Animal 以及扩展 Animal 的 Dog 和 Cat 类,而不是方法 woof() 和方法 meow() 我将创建一个方法 makeSound() 或 speak() 两者都存在。
标签: java casting subclassing instanceof