1 | // License: GPL. For details, see LICENSE file.
|
---|
2 | package org.openstreetmap.josm.data.osm;
|
---|
3 |
|
---|
4 | /**
|
---|
5 | * An interface allowing injection of hashcode and equality implementation
|
---|
6 | * based on some inner state of an object for a set.
|
---|
7 | * It supports two type parameters to implement effective foreign key implementation
|
---|
8 | * inside (@link Storage}, but for basic use, both type parameters are the same.
|
---|
9 | *
|
---|
10 | * For use cases, see {@link Storage}.
|
---|
11 | * @author nenik
|
---|
12 | * @param <K> type for hashCode and first equals parameter
|
---|
13 | * @param <T> type for second equals parameter
|
---|
14 | */
|
---|
15 | public interface Hash<K, T> {
|
---|
16 |
|
---|
17 | /**
|
---|
18 | * Get hashcode for given instance, based on some inner state of the
|
---|
19 | * instance. The returned hashcode should remain constant over the time,
|
---|
20 | * so it should be based on some instance invariant.
|
---|
21 | *
|
---|
22 | * @param k the object to compute hashcode for
|
---|
23 | * @return computed hashcode
|
---|
24 | */
|
---|
25 | int getHashCode(K k);
|
---|
26 |
|
---|
27 | /**
|
---|
28 | * Compare two instances for semantic or lookup equality. For use cases
|
---|
29 | * where it compares different types, refer to {@link Storage}.
|
---|
30 | *
|
---|
31 | * @param k the object to compare
|
---|
32 | * @param t the object to compare
|
---|
33 | * @return true if the objects are semantically equivalent, or if k
|
---|
34 | * uniquely identifies t in given class.
|
---|
35 | */
|
---|
36 | boolean equals(K k, T t);
|
---|
37 | }
|
---|