gpt4 book ai didi

java - 如何根据对象 instanceof 选择要执行的操作?

转载 作者:行者123 更新时间:2023-11-29 07:09:21 25 4
gpt4 key购买 nike

我有类 Base 的一些实现, 所有对象都收集在 List<Base> 中.

如何调用特定的 action基于 instanceof这些对象,而不必使用冗长的instanceof检查?我如何根据这些对象的实例选择要执行的服务方法,而不必关心在哪个对象上执行操作。应该以某种方式自动选择正确的服务方法,而无需类型化或 instanceof 检查。

class Base;
class Foo extends Base;
class Bar extends Base;

class Service {
List<Base> bases;

public void someMethod() {
for (Base base : bases) {
//perform some instanceof dependend action.
//these actions cannot be inside of any Base class as it makes use of other objects too.
if (base instanceof Foo) {
fooService.action((Foo) base);
}
if (base instanceof Bar) {
barService.action((Bar) base);
}
}
}
}


//custom service methods
class FooService {
void action(Foo foo) {
}
}

class BarService {
void action(Bar bar) {
}
}

最佳答案

多态性是一种可能性。如果 Base 类包含一个抽象的 action() 方法,您可以直接调用它,而无需任何 if 语句。

另一个是注册表。对于 Base 的每个子类,您可以注册一个到服务类的映射。在someMethod()中,查找注册表中的类,得到对应的服务类,并调用。

顺便说一下,冗长并不是 instanceof 语句的唯一问题。一旦创建了 Base 的新子类,您使用这些编写的代码就会中断。满足Open/Closed principle可以减少脆弱的代码。

关于java - 如何根据对象 instanceof 选择要执行的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15736145/

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