В вашей текущей схеме есть несколько ошибок:
Comparator
и Comparable
- это два разных подхода к сравнению объектов.Вы путаете их. - Вы пытаетесь сохранить функцию, которая выполняет сравнения на карте.Позже вы выбираете значение с карты и пытаетесь сравнить его (функцию) с
Comparator
.Это не сработает, так как вы не можете сравнить функцию ни с чем, кроме другой функции. - Фактически вы нигде не храните значение;вы только сохраняете функцию.
- В вашем примере вы храните два разных значения для одного и того же
VARIABLE_NAME
.Это намеренно?
Если вы хотите создать карту свойств, вам нужно создать хранимый объект, который можно сохранить на карте и сравнить его значение с предоставленным значением.Например,
class Storable<T extends Comparable<T>> {
private final T value;
Storable(T value) {
this.value = value;
}
int compareTo(Object other) {
if ( value.getClass().equals(other.getClass()) ) {
return value.compareTo( (T) other );
}
return -1;
}
}
Теперь создайте соответствующие подклассы:
class StorableInt extends Storable<Integer> {
StorableInt(Integer t) {
super(t);
}
}
class StorableString extends Storable<String> {
StorableString(String s) {
super(s);
}
}
Ваша карта свойств теперь выглядит следующим образом:
Map<String, Storable<?>>map = new HashMap<>();
map.put(variableName1, new StorableInt(13));
map.put(variableName2, new StorableString("string2"));
<T extends Comparable<T>> int compare( String key, T val ) {
return map.get( key ).compareTo( val );
}
Теперь вы можете сохранять свойства вкарту и сравните значения с этими свойствами.