ProvidesKey<T> abstract class
Implementors of {@link ProvidesKey} provide a key for list items, such that items that are to be treated as distinct (for example, for editing) have distinct keys.
The key must implement a coherent set of {@link Object#equals(Object)} and {@link Object#hashCode()} methods such that if objects {@code A} and {@code B} are to be treated as identical, then {@code A.equals(B)}, {@code B.equals(A)}, and {@code A.hashCode() == B.hashCode()}. If {@code A} and {@code B} are to be treated as unequal, then it must be the case that {@code A.equals(B) == false} and {@code B.equals(A) == false}.
@param <T> the data type of records in the list
abstract class ProvidesKey<T> {
/**
* Get the key for a list item.
*
* @param item the list item
* @return the key that represents the item
*/
Object getKey(T item);
}