Java 确定语句是否在运行时满足条件
我有一个函数,它接受两个参数,Java 确定语句是否在运行时满足条件,java,runtime,conditional-statements,Java,Runtime,Conditional Statements,我有一个函数,它接受两个参数,foo(a,字符串类型)根据类型,我必须更改if语句条件 foo(A a, String type){ //if type equals 'bar' if(!a.isEmpty() && a.hasMember()){...} //but if type is something else if(!a.isEmpty() || a.hasMember()){...} } 如果正文中的逻辑是相同的,那么几乎所有其他内容
foo(a,字符串类型)
根据类型,我必须更改if
语句条件
foo(A a, String type){
//if type equals 'bar'
if(!a.isEmpty() && a.hasMember()){...}
//but if type is something else
if(!a.isEmpty() || a.hasMember()){...}
}
如果正文中的逻辑是相同的,那么几乎所有其他内容都是相同的,除非条件是有任何有效的方法来实现差异,或者我必须将所有内容写入两次?我想您可以使用以下方法:
foo(A a, String type){
//if type equals 'bar'
if("bar".equals(type)) {
if(!a.isEmpty() && a.hasMember()){...}
}
else {
//but if type is something else
if(!a.isEmpty() || a.hasMember()){...}
}
}
说明:若类型的值为“bar”,那个么若条件为true,那个么将执行该条件所需的任何代码
您也可以使用简明的形式:
if( ("bar".equals(type) && (!a.isEmpty() && a.hasMember())) || (!"bar".equals(type) && (!a.isEmpty() || a.hasMember()))) {
// Do your stuff
}
需要注意的一点是
“bar”。equals(type)
比type.equals(“bar”)
好,因为当type为null时,它还可以避免您遇到的麻烦。我想您可以使用以下选项:
foo(A a, String type){
//if type equals 'bar'
if("bar".equals(type)) {
if(!a.isEmpty() && a.hasMember()){...}
}
else {
//but if type is something else
if(!a.isEmpty() || a.hasMember()){...}
}
}
说明:若类型的值为“bar”,那个么若条件为true,那个么将执行该条件所需的任何代码
您也可以使用简明的形式:
if( ("bar".equals(type) && (!a.isEmpty() && a.hasMember())) || (!"bar".equals(type) && (!a.isEmpty() || a.hasMember()))) {
// Do your stuff
}
需要注意的一点是“bar”。equals(type)
比type.equals(“bar”)
好,因为当type为null时,它还可以避免麻烦,将谓词与|
组合,并在每个条件部分检查type
if (type.equals("bar") && !a.isEmpty() && a.hasMember()) || (!type.equals("bar") && (!a.isEmpty() || a.hasMember())) {
//do your thing
}
如果null
是type
的一个可能值,那么可以将检查更改为“bar”.equals(type)
,以避免出现null点异常
将谓词与|
组合,并在每个条件部分检查type
if (type.equals("bar") && !a.isEmpty() && a.hasMember()) || (!type.equals("bar") && (!a.isEmpty() || a.hasMember())) {
//do your thing
}
如果null
是type
的一个可能值,那么可以将检查更改为“bar”.equals(type)
,以避免出现NullPointerException
可以使用键类型的映射,并且值应该是具有类型相关逻辑的对象
foo(A a, String type) {
typesMap.get(type).execute(a);
}
class TaskImpl implements Task { // each task should behave as it should be
@override
public void execute(A a) {
if(!a.isEmpty() && a.hasMember()) {...}
}
}
可以使用键类型的映射,并且值应该是具有类型相关逻辑的对象
foo(A a, String type) {
typesMap.get(type).execute(a);
}
class TaskImpl implements Task { // each task should behave as it should be
@override
public void execute(A a) {
if(!a.isEmpty() && a.hasMember()) {...}
}
}
谢谢你的意见,但这正是我试图避免的,我正在寻找是否有其他方法可以做到这一点it@IliaAptsiauri:你说的其他方式是什么意思?意思是我不想重复我的if语句的主体twice@IliaAptsiauri:在这种情况下,您可以加入条件。检查我的编辑。感谢您的输入,但这正是我试图避免的,我正在寻找是否有其他方法可以做到这一点it@IliaAptsiauri:你说的其他方式是什么意思?意思是我不想重复我的if语句的主体twice@IliaAptsiauri:在这种情况下,您可以加入条件。检查我的编辑。哦,快照,这太简单了,我应该自己想想:)thanks@Tim在这种情况下,我们还需要检查type
是否为null。将type.equals(“bar”)
语句转过来(“bar.equals(type)
)。如果类型
可能为空值,这将为您提供一些不必要的NPE检查。快照非常简单,我应该自己考虑一下:)thanks@Tim在这种情况下,我们还需要检查type
是否为null。将type.equals(“bar”)
语句转过来(“bar.equals(type)
)。如果类型
可能为空值,这将为您提供一些不必要的NPE检查