如何打开我的equals语句以接受Java中的多个参数?

Pur*_*ret 5 java variables

我有一个梦想....

在这个梦想中,我可以取代以下构造:

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可以允许这样做?如果不是这样,如果这是任何语言的功能?这对我来说似乎很直观,但我没有在任何地方看到它.

Ste*_*n C 7

这在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)

事实上,我想不出任何支持类似于你提议的语法的语言.令我感到震惊的是,这种模糊性的可能性太大,无法成为一个健全的结构.


Waj*_*sam 5

为了便于阅读,如果检查的数量足够小,您可以只使用简单的变量.

例如(对于任何类型的对象都是一样的)

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)

有时简单比聪明更好!

  • 简单就是聪明! (2认同)