目前在arraylist中获取特定对象时遇到问题。所以我有多个实现相同接口的类,我创建了不同类的对象。问题是我不知道如何区分arraylist中的类。
ArrayList<Interface> arraylist = new ArrayList<>();
public static void main(String[] args) {
addInterface(new interfaceA());
addInterface(new interfaceB());
addInterface(new interfaceC());
}
public static void addInterface(Interface foo) {
arraylist.add(foo);
}
假设我想获得interfaceA()
,我可以通过arraylist.get(0)
来调用它,但我不想对其进行硬编码。每个类都有相同的方法,但代码不同。
答案 0 :(得分:2)
您可以通过检查运行时类来使用谓词进行过滤:
List<Interface> interfaceAList = arraylist.stream()
.filter(e -> InterfaceA.class.isInstance(e))
.collect(Collectors.toList());
答案 1 :(得分:2)
我会使用Map
代替List
。在这种情况下,IdentityHashMap非常适合。
interface Thing {
}
IdentityHashMap<Class<? extends Thing>, Thing> things = new IdentityHashMap<>();
class ThingA implements Thing {
@Override
public String toString() {
return "ThingA{}";
}
}
class ThingB implements Thing {
@Override
public String toString() {
return "ThingB{}";
}
}
class ThingC implements Thing {
@Override
public String toString() {
return "ThingC{}";
}
}
public void registerThing(Thing thing) {
things.put(thing.getClass(), thing);
}
public void test(String[] args) {
registerThing(new ThingA());
registerThing(new ThingB());
registerThing(new ThingC());
System.out.println(things.get(ThingB.class));
}
答案 2 :(得分:0)
public Interface getInterfaceA(List<Interface> interfaces) {
for (Interface i : interfaces) {
if (i instanceof InterfaceA)
return i;
}
return null;
}