2011-01-14 47 views
0

我有一个类是复合模式中的叶子。该类有一个属性,可以是A类型或B类型。它们唯一的通用接口是Object类型。属性的两种可能的类型

我应该如何支持这个。

我可以

  1. 具有用于每种类型的一个add方法。然而,这意味着我应该有两个A和B类型的属性,并且当我想获得正确的属性时应该检查null。

  2. 有一个Object类型的属性。这意味着我必须检查当我获得该属性时它是哪种类型的实例。

这种类型的问题的最佳解决方案是什么?或者有更好的解决方案

回答

1

我个人会选择单一的Object属性方法。记录属性可能返回的对象的类型,并让调用代码使用可用的语言功能来确定对象类型,并根据需要进行强制转换。实现两个属性有点重塑你的语言的“is-a”运算符,并且如果你需要添加更多可能的类型,它将很快变得难以管理。

0

那么如果您使用的是支持类型抽象的语言(如Java中的泛型或C++中的模板),那么您可以将该属性设置为泛型类型。如果没有,使用对象,每种类型的方法只是一个丑陋的黑客(如果你稍后添加更多的类型,那么这是一种无法形容的方法)。

+0

我相信OP表明泛型不适用的情况;例如不是每个处理该对象的人都会事先知道*它将包含什么类型的对象,并且必须事先知道泛型参数才能使用该类型。 – cdhowie 2011-01-14 14:42:07