【发布时间】:2011-11-16 01:46:43
【问题描述】:
假设我有一个 ArrayList,我已将其转换为对象的 ArrayList。我知道我投射的 ArrayList 中的所有对象都是同一类型,但不是什么类型。
现在,如果 ArrayList 不为空,我可以取其中一个对象并使用 instanceof 运算符来了解实际类型是什么。但是 ArrayList 为空的情况如何呢?那么我如何确定 Object 的实际类型呢?有可能吗?
编辑:回想起来,我认为空的 ArrayList 拥有什么类型并不重要。我可以丢弃旧的并构造一个新的空 ArrayList,它是我首先要寻找的正确类型。
这有点混乱,所以如果有人对如何允许大量可能不共享相关公共超类(例如 Integer 和 ArrayList)的潜在类型有替代建议,我愿意接受建议。问题是,我有一个类,其中包含专门设计用于在其中可互换使用的其他类。包含的类可以对类型做出假设,因为它们是定义它的类。周围的类不能做出这样的假设,但必须确认它指定的类型与已插入其中的包含类相同。
因此我的问题是,因为包含类是泛型的(泛型指定它正在处理的类型),但它必须确保它传递的包含类返回并在指定给它的类型上运行(它们设计为单独创建,因此必须在插入时确认它们匹配的事实,而不是在创建时确认)。
【问题讨论】:
-
我认为一个更好的问题是问你如何做你想做的事情是否是最好的方法,因为我在一天中看到了一两行代码并且我没有看到任何需要您粗略描述的解决方案。
-
为了进一步澄清,它是一种模块化设计。问题是用户很容易传递错误类型的模块。
-
呃,输入太早了。举个例子:EX。爬山搜索算法模块,它包含两个子模块:一个状态模块和一个启发式模块。状态的设计考虑了精确的结构,但爬山算法可以在多种状态上运行。爬山算法必须处理状态模块可能传递给它的任何形式。虽然回想起来,设计可能只使用 Object,因为爬山不需要严格地做任何事情,而是传递它......
-
当你发现那个类型时你会怎么做?做案例分析? 您的应用程序中的空列表有什么意义?