在Java中存储不同类型对象的有序列表的最佳方法?

问题描述 投票:3回答:1

我有几个用于创建对象的类。这些对象每个都有必须运行的代码,具体取决于插入的顺序。

它们需要按顺序存储-并按存储顺序调用。

  1. 对象A
  2. 对象B
  3. 对象A
  4. 对象A
  5. 对象C
  6. 对象D

我不确定在Java中处理此问题的正确方法是否是通用列表并在运行时检查类型。

List<Object> list = new ArrayList<Object>();

我还考虑过将每个对象类型存储在其自己的类型列表中,并以正确的顺序从列表中读取父对象。但是,这似乎比仅在运行时处理检查对象类型更为复杂。

处理此问题的正确“ Java”方法是什么?

java generics collections java-8 functional-interface
1个回答
4
投票

如果这些对象不具有共同的祖先:

这些类无关。他们没有共同的祖先。

然后您可以做的是创建另一个类作为包装器:

  1. [C0类型的对象。
  2. T对象用作对需要调用的代码的引用。

例如:

Consumer<T>

然后创建另一个管理 class Invocable<T> { private final T target; private final Consumer<T> invocation; public Invocable(T target, Consumer<T> invocation) { this.target = target; this.invocation = invocation; } public void runInvocation() { invocation.accept(target); } } 的类,如下所示:

List<Invocable>

就是这样!只需使用class RunnableList { private List<Invocable<?>> invocables = new ArrayList<Invocable<?>>(); public <T> void add(T target, Consumer<T> invocation) { invocables.add(new Invocable<T>(target, invocation)); } public void run() { invocables.forEach(Invocable::runInvocation); } } 方法将任何对象添加到RunnableList,完成添加所有对象(参考要调用的相应代码)后,只需在add(T target, Consumer<T> invocation)上调用run即可。

下面是一个完整的工作示例,请尝试一下以了解它:

RunnableList

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.