日期:2014-05-20  浏览次数:20697 次

我这个场景用泛型还是继承合适呢
我这个场景用泛型还是继承合适呢

一个实体A,有一个列表,列表元素是很多大同小异的类型B1 B2 B3
class A<T>
{
List<T>
}

还是这样好

class A
{
List<B>
}
B是B1 B2 B3的父类

这两种实现什么区别呢

------解决方案--------------------
你可以仔细思考下

像你所说的 如果列表元素很多的话 那岂不是得有很多子类

我个人感觉还是用泛型好
------解决方案--------------------
假设你用继承方式
class A {
  List<B> list
}

使用的结果是,在你的应用中,总是要 cast 类型到子类 B1,B2,B3。
那你就最好改用 class A<T> 的方法。

也就是说,B1,B2,B3 子类的差距大小,决定你的选择。

子类差距越大,越有特殊性,越应该选择 A<T> 的方法;极端的情况,如果差距大到没有父类(或父类只能是Object),那你只有用 A<T> 的方法。

如果子类差距小,不需特殊对待,可用A,List<B> 的方式。

------解决方案--------------------
从OOP来说,使用接口B抽象B1 B2 B3,满足面向接口编程。
从泛型来说,使用List<B>来约束List中内容的类型保证安全性。

所以如果B1 B2 B3能抽象出接口B的话,当然要使用第二种方法。