gpt4 book ai didi

Java 设计 : Polymorphic List

转载 作者:行者123 更新时间:2023-11-30 06:55:12 24 4
gpt4 key购买 nike

我有三个类 A、B、C。

A 是抽象的,B 和 C 扩展了 A。

我的目标是让用户能够制作 C 或 B 的列表(而不是将两者都放在同一个列表中),我想通过智能设计强制用户这样做。

我的想法是让抽象类 AList 具有以下功能:

void add (A a)  

和两个类:

BList 扩展 AList,函数 void add (B b) 覆盖 AList 的 add。

CList 扩展 AList,函数 void add (C c) 覆盖 AList 的 add。

但这没有用,因为您不能在覆盖时更改函数参数(更具体地说)。

最佳答案

如果你只想执行 List<B>List<C> , 那么做到这一点的方法就是使用工厂方法:

class AList<T extends A> {
private AList() {...} // users outside the class can't invoke the constructor

public static AList<B> createBList() {
return new AList<B>();
}

public static AList<C> createCList() {
return new AList<C>();
}
}

这会强制您的类之外的用户使用其中一种工厂方法,而工厂方法只会创建 B 的列表。 s 或 C s,不是 A

也就是说,您并不清楚您真正想要做什么。您无法阻止某人创建 ArrayList<A>并把 B s 和 C s 在其中,也不清楚为什么要重新发明轮子并创建自己的列表类型。

关于Java 设计 : Polymorphic List,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35588459/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com