假设我有一个抽象类A和一个从其继承的三个具体类A1,A2和A3。还有一个不同的层次树,具有抽象类B和三个具体类B1,B2和B3。每个具体的类A需要保存一个分别为B类的对象列表。这意味着A1拥有B1的列表。什么是更好的解决方案:
使A成为通用类,并使其包含扩展B的T的通用列表,例如:
abstract class A<T extends B> {
protected arr: Array<T extends B>
}
这样,我应该声明每个A类如下:
class A1 extends A<B1>
使用如下组成:
class A1 extends A {
private arr: Array<B1>
}
答案 0 :(得分:1)
如果我在不同的类中有很多相似的代码,我会更喜欢泛型。因此,如果您的类A1, A2, A3
在功能上相似,而在type of B object
上有所不同,则应使用泛型。除此之外,我没有想到使用泛型的充分理由。如果上述原因不成立,请使用composition
。
答案 1 :(得分:0)
我更喜欢第二个! 当您有两种方法和功能应应用于与类型无关的对象时,将使用泛型类。 否则,将类声明为泛型仅用于解决组合问题不是一个好设计!
答案 2 :(得分:0)
它们是同一件事,每个结果都是相同的。但是只有第一个是类型无关的。因此,长期使用1更有用。