好的,所以我正在处理一个带有抽象类 A 的项目。假设类 a1、a2 和 a3 都继承自类 A,并带有一些可能对每个子类都是唯一的附加方法。现在,这些对象可以作为用户交互的结果与其他对象配对,但只能配对某些类型的对象,即对象B只能使用a1,对象C只能使用a2,并且用户尝试将它们配对否则会导致告诉他们他们不能。我当然想避免使用 instanceof,因为这在很大程度上是一种不好的做法,但我认为我目前有一个相当严重的脑胀气病例。我想在父类中添加一个 getType() 或一些这样的方法来返回每个子类唯一的字符串,但这感觉很陈旧。获取班级名称的感觉大致相同。我'
问问题
168 次
2 回答
2
如果您真的决定不使用 instanceof,并且无论出于何种原因,您都无法为实例类之外的配对定义参数,请向抽象类添加一组新方法,这些方法可以执行以下两项操作之一:
a) 方法worksWithTypeB、worksWithTypeC 等等,在子类中适当地定义它们。然而,这很像类型检查。
b) 将类型 B 和 C 使用的方法转移到抽象类;通常在 B 和 C 可以使用的类中定义它们(假设 B 类型使用 a1.methodB,C 类型使用 a2.methodC),但定义它们以抛出在方法中不会的异常否则存在(因此 a1.methodC 抛出异常,a2.methodB 也是如此)。
尽管正如 ilcavero 所说,在这种情况下,类型检查并没有什么问题。
于 2012-06-24T01:01:48.203 回答
0
我正在考虑通过在这种情况下使用泛型来解决问题。
为此,您需要定义一个类,该类通常存储两个值,例如
类对<k,v扩展A>
现在您将向哈希图中添加您可以拥有的所有类型的对。当需要该类型的一对时,您将通过其名称获得该对。
缺点:
您必须将所有想要的对添加到容器中
您必须将一对与名称相关联
请注意,在大规模情况下,这将是一个糟糕的解决方案。
于 2012-06-24T00:59:04.153 回答