gpt4 book ai didi

java - 用于迭代/取消引用混合对象类型列表的 instanceof 和 if-else 语句的替代方案

转载 作者:行者123 更新时间:2023-12-02 11:07:37 25 4
gpt4 key购买 nike

我有一个非原始对象的数组列表,其中每个对象都是 10 个不同类之一的实例化。

我想遍历列表,并为列表中的每个对象调用基于对象类的方法。

浏览完帖子后,我看到了使用cast;if/else;的建议。以及有效的实例。然而,由于我有大量的类(class),我想知道是否有更优雅的和简洁的解决方案。

欢迎任何意见。

最佳答案

我确实会避免这种instanceof检查链。事实上,我通常会避免使用 if/elseswitch 链(有异常(exception)情况)。

如果我们有一系列instanceof检查,我们经常会遇到的情况是责任错位和缺乏多态性。

想象一下以下代码:

class Type1 {}
class Type2 {}
class Type3 {}

class TypeProcessor {
public void processObjets() {
final List<Object> objects = getObjectList();
for (final Object o : objects) {
if (o instanceof Type1) {
processType1((Type1) o);
} else if (o instanceof Type2) {
processType2((Type2) o);
} else if (o instanceof Type2) {
processType2((Type2) o);
}
}
}
public void processType1(final Type1 o) {
/* Process for Type 1. */
}
public void processType2(final Type2 o) {
/* Process for Type 2. */
}
public void processType3(final Type3 o) {
/* Process for Type 3. */
}
}

可以这样重构:

interface Type {
void process();
}

class Type1 implements Type {
public void process() {
/* Process for Type 1. */
}
}

class Type2 implements Type {
public void process() {
/* Process for Type 2. */
}
}

class Type3 implements Type {
public void process() {
/* Process for Type 3. */
}
}

class TypeProcessor {
public void processObjects() {
final List<Type> objects = getObjectList();
for (final Type o : objects) {
o.process();
}
}
}

关于java - 用于迭代/取消引用混合对象类型列表的 instanceof 和 if-else 语句的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27660378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com