Учитывая текущий рассматриваемый код и близкий к тому, что упомянуто в ответе Салли , вы можете использовать Function
, определенный вместе с обобщенным c Consumer
, чтобы получить значение для потребление:
public static <T> void ifChangedGeneric(String key, Consumer<T> consumer, Function<String, T> function) {
consumer.accept(function.apply(key));
}
Реализация может быть далее использована как:
public static void main(String[] args) {
ifChangedGeneric("key", <Class>::useString, <Class>::getString);
ifChangedGeneric("true", <Class>::useBoolean, <Class>::getBoolean);
}
С примером реализации методов getBoolean/String
и useBoolean/String
, как показано ниже ...
static Boolean getBoolean(String key) {
return key.equalsIgnoreCase("true") ? Boolean.TRUE : Boolean.FALSE;
}
static void useBoolean(Boolean bool) {
System.out.println("Boolean implementation!");
System.out.println(bool.equals(Boolean.TRUE));
}
static String getString(String key) {
return key + ": naman";
}
static void useString(String str) {
System.out.println("String implementation!");
System.out.println(str);
}
Сгенерированный вывод будет:
String implementation!
key: naman
Boolean implementation!
true