Java 比较中的位置

Java 比较中的位置,java,refactoring,code-duplication,Java,Refactoring,Code Duplication,我正在寻找一些带有静态函数的库,以消除比较“事物”的代码中的重复 你可以这样做 Arrays.asList(s1, s2, s3).contains(evil) 第二行稍微短一点,switch语句就可以了: switch (evil) { case enum1: case enum2: case enum3: //code break; } 对于初学者来说,这个怎么样: boolean equalsAny(Object object, Object.

我正在寻找一些带有静态函数的库,以消除比较“事物”的代码中的重复


你可以这样做

Arrays.asList(s1, s2, s3).contains(evil)

第二行稍微短一点,switch语句就可以了:

switch (evil) {
   case enum1:
   case enum2:
   case enum3:
      //code
      break;
}

对于初学者来说,这个怎么样:

boolean equalsAny(Object object, Object... others) {
    for (Object other : others) {
        if (other.equals(object))
            return true;
    }
    return false;
}

Object evil = ...;
SpecialClass special = ...;
AnotherClass another = ...;
if (equalsAny(evil, "aString", special, Integer.valueOf(42), another)) {
    // match found!
}

我不知道有什么特别的库,但如果您不关心性能,以下内容应该是现成的:

Arrays.asList(s1, s2, s3).contains(evil);
没有列表创建开销的简单实现可能类似于:

public static boolean equalsAny(Object obj, Object ... others) {
    for (Object other: others) {
        if (obj.equals(other))
            return true;
    }

    return false;
}

短但贵。您的代码所做的是创建一个数组并对其进行迭代。@PeterLawrey:嗯?什么意思?
对象…
是一个数组。如果你要保留它,你会有一个新的对象。然而,通过Escape分析,JVM可以确定这个对象只在这个方法中使用,并在堆栈上分配它(或者完全删除它)@PeterLawrey:Ohh我明白你的意思了-Escape分析是JVM用来优化这个方法的。以前从未听说过;很酷!谢谢搜索
-XX:+doescapealysis
,它在Java6更新19中默认处于打开状态。安定下来,我有了编写此类函数的基本想法(但我很懒)。。。我所看到的是一些“标准”库,它们具有重载方法,并且也可以比较枚举。当然还有相同类型的对象。
public static boolean equalsAny(Object obj, Object ... others) {
    for (Object other: others) {
        if (obj.equals(other))
            return true;
    }

    return false;
}