gpt4 book ai didi

java - 将 List 分解为一组已知派生类型的列表
转载 作者:行者123 更新时间:2023-12-01 18:31:24 26 4
gpt4 key购买 nike

假设我有一个类似 List<Object> objectList 的参数,这是外部提供给我的,我完全无法控制。还假设我知道此列表中每个元素的向下转换类型的每种可能性。例如,假设我知道 objectList包含以下类型的元素:int, String, double, boolean .

我可以使用什么方法来过滤objectList使用 instanceof 到每个向下转换类型的单独列表而不 。因此,对于这个例子,我想输入 objectList变成看起来像这样的东西:

class SpecificTypes
{
List<Integer> intList;
List<String> stringList;
List<Double> doubleList;
List<Boolean> booleanList;
}

假设我想编写一个如下所示的函数:

SpecificTypes filterObjectList(List<Object> objectList)
{
SpecificTypes results = new SpecificTypes();

// Populate 'results' somehow
// Without using cascading if/else or switch logic

return results;
}

我的研究很快就引导我找到了访问者模式,但我得出的结论是我不能使用它,因为我需要控制存储在 objectList 中的类型。 (或者至少能够将它们包装在我自己的派生类型中),但这些是从外部源提供给我的,因此访问者模式似乎是不可能的(对吗?)。

对象列表中派生类型的子集相当小(尽管实际上它比本示例中的 4 个大),并且这些类型将不会发生变化。因此,如果我需要编写多个特化和调度程序,那也没关系。我试图避免任何类型的级联 if/else 或 switch 语句。

是否有某种方法可以专门化函数来正确地解决这些问题?

最佳答案

不,作者:List<Object> objectList您正在告诉语言您放弃了任何比 Object 更具体的内容的类型安全性。这是关于 Java 的一切。

您必须执行instanceof检查您想要匹配的类型。你必须执行强制转换,因为这实际上就是你正在做的事情——强制转换。围绕它进行黑客攻击不会有帮助。

关于java - 将 List<Object> 分解为一组已知派生类型的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24005698/

26 4 0