在这个梦想中,我可以取代以下构造:
if(aLongVariableName.equals(classInstance.aPropertyOfThatInstance) ||
aLongVariableName.equals(classInstance.aDifferentProperty)){
...
}
Run Code Online (Sandbox Code Playgroud)
同
if(aLongVariableName.equals(classInstance.aDifferentProperty || aPropertyOfThatInstance)){
...
}
Run Code Online (Sandbox Code Playgroud)
我认为后者更简洁,更容易阅读.我确信应该可以实现某些方法,因为可以用这种签名来声明方法,这种签名public void readUnlimitedVariables(Variable ... vars)采用逗号分隔的变量(而不是||甚至是&&).
这可以打开任何返回布尔值的东西,例如:
if(myLovelyInstance instanceof AwesomeClass && EpicClass){
...
}
Run Code Online (Sandbox Code Playgroud)
其中myLovelyInstance器具AwesomeClass && EpicClass
这在Java中可行吗?到目前为止,我还没有通过谷歌搜索或SO搜索到任何内容.如果它不是在Java中,那么是否有任何第三方软件包如Lombok或lambdaJ可以允许这样做?如果不是这样,如果这是任何语言的功能?这对我来说似乎很直观,但我没有在任何地方看到它.
这在Java中可行吗?
没有.
该||操作需要两个布尔操作数.没有办法改变这一点.Java不允许您重载运算符,或以其他方式"扩展语言语法".
你可以得到的最接近的是为这样的equals定义一个重载:
public boolean equals(Object ... others) {
for (Object other: others) {
if (this.equals(other)) {
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
if (aLongVariableName.equals(classInstance.aDifferentProperty,
classInstance.anotherProperty)) {
...
}
Run Code Online (Sandbox Code Playgroud)
......根本不是很接近.(也是一个非常糟糕的主意,IMO)
事实上,我想不出任何支持类似于你提议的语法的语言.令我感到震惊的是,这种模糊性的可能性太大,无法成为一个健全的结构.
为了便于阅读,如果检查的数量足够小,您可以只使用简单的变量.
例如(对于任何类型的对象都是一样的)
boolean isPDFFile = extension.equalsIgnoreCase("PDF");
boolean isHTMLFile = extension.equalsIgnoreCase("html");
if (isPDFFile || isHTMLFile ) {
// do your processing
}
Run Code Online (Sandbox Code Playgroud)
如果你使用String,Regulare Expression是另一种方式:
if (extension.matches("PDF|HTML")) {
// do your processing
}
Run Code Online (Sandbox Code Playgroud)
有时简单比聪明更好!