Я получаю некоторое поведение, которое я не понимаю с Java Hashcode (используя Lombok). У меня есть абстрактный объект Storeable для вещей, которые я храню в различных хранилищах данных.
public abstract class Storable implements Serializable {
...
}
@Data
@EqualsAndHashCode(of="url", callSuper=false)
@Slf4j
@ToString(of="url")
public final class Foo extends Storable {
private URL url;
public Foo(@NonNull URL url, ...) {
super();
this.url = url;
...
}
...
}
Когда я обновляю несколько Foos с помощью new Foo(new URL("http:///www.foo.com ")) и я перебираю их и проверяю каждый foo.hashCode(), я получаю одно и то же значение. Но если я завершу программу, а затем запущу другой запуск, foos в новом запуске будут иметь другое значение hashCode, даже если они выглядят одинаково с точки зрения данных. Несоответствие причиняет мне горе, потому что я пытаюсь использовать hashCode для идентификации уникальных объектов от запуска к запуску. Возможно, что еще более странно, для заданного URL-адреса, который я использую для тестирования, я каждый раз вижу 1 из тех же 4 целых чисел.
Я что-то пропустил либо в реализации getHashcode() по умолчанию для Java, либо в реализации Lombok @EqualsAndHashCode? Или есть что-то в URL-адресе, что может привести к тому, что он будет иметь другое значение hashCode? Заранее спасибо за помощь!
url
является полемString
, но имеет параметрURL
в конструкторе. что это? - person dkatzel   schedule 21.07.2015