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;
}