Ich versuche, einen Weg zu finden, meine Klasse 'equals-Methode arbeiten entweder für den Klassentyp oder eine primitive int, aber etwas fühlt sich nicht richtig über den Ansatz I haben:Override entspricht, um gegen Klassentyp oder Primitiv int zu überprüfen
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);
}
}
der Grund, warum ich dies tun würde, wenn ich eine Arraylist myClassList habe ich, ohne manuell iterieren für .contains zu tun, entweder eine Instanz von MyClass oder ein int, in der Lage sein wollen, dass die ArrayList für einen int. Also wie folgt:
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
Ich bin noch nie zuvor darauf gestoßen, also weiß ich nicht, was der sauberste Ansatz ist.
Eine 'ArrayList' kann kein primitives' int' (s) enthalten. –
Das ist eine schlechte Idee. Verwenden Sie die entsprechende Technik, iterieren. Oder verwende eine Karte. – Savior
Das Erstellen eines Pojos, das gleich einem 'int' sein kann, klingt wie eine schlechte Idee und kann/kann zu einem verwirrenden Code und Verhalten führen. Es könnte "cool" sein, 'myClassList.contains (someID);' zu verwenden, aber ein anderer Ansatz, wie das manuelle Iterieren, führt zu viel saubererem und unnachgiebigerem Code. – Tom