查找ArrayList 中保存的特定类型(即Object = String等)

假设我有一个ArrayList,我已经转换为对象的ArrayList。 我知道我投射的ArrayList中的所有对象都是相同的类型,但不是类型。

现在,如果ArrayList不为空,我可以使用其中的一个对象并使用instanceof运算符来了解实际类型。 但是ArrayList为空的情况呢? 我如何确定Object的实际类型呢? 可能吗?

编辑:回想起来,我认为空ArrayList的类型并不严格。 我可以丢弃旧的并且构造一个我正在寻找的正确类型的新空ArrayList。

它有点乱,所以如果有人有关于如何允许各种可能不共享相关公共超类(例如Integer和ArrayList)的潜在类型的替代建议,我愿意接受建议。 问题是,我有一个类,它将包含专门设计用于在其中互换的其他类。 包含的类可以对类型进行假设,因为它们是定义它的类型。 周围的类不能做出这样的假设,但必须确认它指定的类型与已插入其中的包含类相同。

因此我的问题是,包含类是通用的(generics指定它处理的类型),但它必须确保它传递的包含的类返回并操作指定给它的类型(它们被设计为可以单独创建,因此它们匹配的事实必须在插入时确认,而不是在创建它们时确认。

不, 类型擦除确保这一点。

正如杰弗里所说,由于类型擦除的魔力,这是不可能的。 我猜你最好的选择是为空列表添加一个额外的案例:

if (list.isEmpty()) { // process empty ... } else { Object o = list.get(0); if (o instanceof Integer) { List integers = (List) list; // process Integer ... } else if (o instanceof String) { List strings = (List) list; // process String ... } // etc... } 

但要小心! 这种链条instanceof通常不被认为是良好的OO实践。 考虑为列表创建一个包装类,而不是传递裸列表然后尝试猜测它们的组成类型,它们也可以包含对Class对象的引用。 这样你也可以重构你的不同处理算法,重写一个process()方法……