Ich möchte eine Karte in Groovy verwenden, wo die Schlüssel Instanzen einer nicht entzifferbaren Klasse sein werden.Karte mit benutzerdefinierten Schlüssel in Groovy vs Java
Dies ist etwas, was ich in Java oft tun, und es funktioniert gut, wie in diesem Beispiel Klasse:
public class TestMap {
static final class Point {
final int x; final int y;
public Point(int x, int y) {this.x = x;this.y = y;}
}
public static void main(String[] args) {
Map<Point, String> map = new HashMap<>();
final Point origin = new Point(0, 0);
map.put(origin, "hello world !");
if(!map.containsKey(origin))
throw new RuntimeException("can't find key origin in the map");
if(!map.containsKey(new Point(0,0))) {
throw new RuntimeException("can't find new key(0,0) in the map");
}
}
}
Aber wenn ich versuche, das gleiche mit Groovy zu erreichen, ist es nicht funktioniert. Warum? Hier ist eine Probe nicht funktionierendes Beispiel in Groovy:
class Point {
final int x; final int y
Point(int x, int y) { this.x = x; this.y = y }
public String toString() { return "{x=$x, y=$y}" }
}
def origin = new Point(0, 0)
def map = [(origin): "hello"]
map[(new Point(1,1))] = "world"
map.put(new Point(2,2), "!")
assert map.containsKey(origin) // this works: when it's the same ref
assert map.containsKey(new Point(0,0))
assert map.containsKey(new Point(1,1))
assert map.containsKey(new Point(2,2))
assert !map.containsKey(new Point(3,3))
Ihre Java-Version funktioniert auch nicht. Siehe [hier] (https://ideone.com/hUsD2H). – Ironcache