gpt4 book ai didi

java - 如何避免使用instanceof?

转载 作者:行者123 更新时间:2023-11-29 08:32:05 25 4
gpt4 key购买 nike

我们如何避免使用 instanceof 运算符来编写干净的代码例如说:如果一个对象是 Type1,则执行某些操作,但如果它是 Type2,则执行其他操作。

if(obj instanceof T1){
doSomething()
}else(obj instanceof T2){
doOtherThing()
}

最佳答案

通常,您使用一系列带有强制转换的 instanceof 来调用类中存在但其他类中不存在的特定方法:

if(obj instanceof T1){
((T1)obj) doSomething();
}
else(obj instanceof T2){
((T2)obj) doOtherThing();
}

为了避免这种情况,如果您可以修改这些类,则 T1T2 应该是公共(public)基类的子类,并且调用的方法应该在基类中定义.
这样,每个子类都可以实现它,你可以这样写:

obj.doSomething();

如果您无法修改这些类,您始终可以引入一个 Adapter 类来包装它们,以提供调用这些方法的通用方法。

适配器

public interface Adapter{
void process();
}

AdapterForT1

public class AdapterForT1 implements MyAdapter{

private T1 adapted;
public AdapterForT1(T1 adapted){
this.adapted = adapted;
}

public void process(){
adapted.doSomething();
}

}

AdapterForT2

public class AdapterForT2 implements MyAdapter{

private T2 adapted;
public AdapterForT2(T2 adapted){
this.adapted = adapted;
}

public void process(){
adapted.doOtherThing();
}

}

你可以这样使用它们:

MyAdapter adapter = new AdapterForT1(obj);
...
adapter.process();

或:

MyAdapter adapter = new AdapterForT2(obj);
...
adapter.process();

关于java - 如何避免使用instanceof?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47082065/

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