gpt4 book ai didi

Java - 行为决策 "instanceof"与标志

转载 作者:行者123 更新时间:2023-12-01 16:46:13 27 4
gpt4 key购买 nike

我目前正在编写一段代码,其中根据请求对象是否属于某个子类型来做出行为决策,如下所示:

class Request{
public void doThing(){
System.out.println("doing Thing...");
}
}

class SpecialRequest extends Request{
...
}

void method(Request request){
if(request instanceof SpecialRequest){
System.out.println("is special...");
}
request.doThing();
}

在这种情况下,SpecialRequest 没有执行任何其他操作,这可以将其与普通请求区分开来。我现在的问题是,使用这种风格是否有任何优点或缺点:

class Request{
...

public boolean isSpecial(){
return special;
}

public void doThing(){
System.out.println("doing Thing...");
}
}

void method(Request request){
if(request.isSpecial()){
System.out.println("is special...");
}
request.doThing();
}

我明白我想做的决定越多,第二种方法就会变得非常复杂。但我也对这两种方法如何比较性能感兴趣。

提前致谢。

编辑:首先感谢您的快速回复。我可能应该提到,我的请求和特殊请求应该只是携带数据,而不包含任何逻辑。这就是整个软件的设计方式。我的方法只是消耗了请求,并且应该根据请求是否特殊而表现不同。 “instanceof”对我来说似乎是肮脏的代码,但 boolean 值似乎也不太正确。仍然欢迎任何建议。

最佳答案

使用方法的明显优点是它与特定类型没有紧密联系。您可以添加一个新类 VerySpecialRequest,它也提供此行为,并且您不一定需要扩展 SpecialRequest 才能做到这一点。

<小时/>

但是,这里更紧迫的问题是您有明确的条件分支。该对象应该负责确定是否需要任何额外的行为,然后讨厌的条件逻辑就完全消失了:

class Request{
public void doThing(){
System.out.println("doing Thing...");
}
}

class SpecialRequest extends Request{
@Override
public void doThing(){
super.doThing();
System.out.println("is special...");
}
}

关于Java - 行为决策 "instanceof"与标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50132826/

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