我正在试图找出一种让我的类'equals方法适用于类类型或原始int的方法,但是对于我的方法感觉不对:
class MyClass {
int myID;
....
[other class variables/methods]
....
@Override
public boolean equals(Object obj) {
if (!(obj instanceof MyClass)) {
// False if neither an int nor a myClass
if (!(obj.getClass().equals(int.class))) {
return false
}
// If int, check against myID
return ((int) obj).myID == myID);
}
// If myClass check against that object's myID
return ((MyClass) obj).myID == myID);
}
}
我想要这样做的原因是,如果我有一个ArrayList myClassList,我希望能够为MyClass或int的实例执行.contains,而不必手动迭代ArrayList以获取int。像这样:
ArrayList<MyClass> myClassList = new ArrayList<MyClass>();
int someID = 5;
MyClass myClass = new MyClass([initialize with myID = 5]);
MyClass otherClass = new MyClass(myClass);
myClassList.add(myClass);
myClassList.contains(otherClass); // returns true
myClassList.contains(someID); // returns true
我以前从未遇到过这种情况,所以我不知道最干净的方法是什么。
答案 0 :(得分:3)
您正在通过违反equals
方法的合同为自己存储麻烦,即使您可以找到使其有效的方法。
Java 8流怎么样?
static boolean listContainsId(List<MyClass> list, int id) {
return list.stream().anyMatch(mc -> mc.myID == id);
}
答案 1 :(得分:1)
如何创建自己的ArrayList类型。
public class MyArrayList<E> extends ArrayList<E> {
public boolean contains(int id) {
return super.contains(new MyClass(id));
}
}