Я пытался сделать:
public class HelloWorld {
public static void main(String... args){
final String string = "a";
final Supplier<?> supplier = string::isEmpty;
System.out.println(supplier);
}
}
я получаю:
HelloWorld$$Lambda$1/[email protected]
Я хотел бы получить строку isEmpty
. Как я могу это сделать?
ОБНОВЛЕНИЕ: код метода, который я создал, это:
public class EnumHelper {
private final static String values = "values";
private final static String errorTpl = "Can't find element with value '{0}' for enum {1} using getter {2}()";
public static <T extends Enum<T>, U> T getFromValue(T enumT, U value, String getter) {
@SuppressWarnings("unchecked")
final T[] elements = (T[]) ReflectionHelper.callMethod(enumT, values);
for (final T enm: elements) {
if (ReflectionHelper.callMethod(enm, getter).equals(value)) {
return enm;
}
}
throw new InvalidParameterException(MessageFormat.format(errorTpl, value, enumT, getter));
}
}
Проблема в том, что я не могу передать в качестве параметра T :: getValue, поскольку getValue не является статическим. И я не могу передать someEnumElem :: getValue, так как get()
вернет значение этого элемента. Я мог бы использовать внутри цикла for:
Supplier<U> getterSupllier = enm:getValue;
if (getterSupllier.get().equals(value)) {
[...]
}
но таким образом getValue
исправлен, я не могу передать его в качестве параметра. Я мог бы использовать какую-нибудь стороннюю библиотеку для создания eval()
, но я действительно не хочу открывать эту вазу Пандоры: D
ОБНОВЛЕНИЕ 2: Function
работает без методов параметров, но только в Java
11. К сожалению, я застрял с Java
8.