В настоящее время я застрял в выяснении того, как работают ссылки на методы. Это то, чего я пытаюсь достичь.
User user = new User(...);
user.getValue(ADerived::getPropertyFromA);
user.getValue(BDerived::getPropertyFromB);
ADerived и BDerive выглядят следующим образом (упрощенно):
public abstract class Base { }
public class ADerived extends Base {
private static final String A_OUTPUT = "Test A";
public String getPropertyFromA() {
return A_OUTPUT;
}
}
public class BDerived extends Base {
private static final String B_OUTPUT = "Test B";
public String getPropertyFromB() {
return B_OUTPUT;
}
}
Метод getPropertyFromX специально не определен в классе Base, поскольку они сильно различаются.
В классе BaseUser я сохраняю экземпляр подклассов на карте и пытаюсь выполнить переданный метод для этого экземпляра. По крайней мере, этот код компилируется, но, конечно, работает не так, как ожидалось. Другие подходы вокруг Function<>
у меня тоже не сработали.
public class User {
public Map<Class, Base> map;
public User(...) {
... creates instances of ADerived and BDerived, puts them into map
}
...
public <R> String getValue(Function<R, String> func) {
return func.apply((R) map.get((R) Base.class));
}
}
Это явно не работает по нескольким причинам, но я не могу найти способ использовать описанное выше.
Реально ли вообще получить описанное использование? Есть ли что-то, что я упускаю?
Хотел бы услышать идеи или получить некоторую помощь.
Base.class
), как вы можете предположить, что он сопоставляется с соответствующим вводом функции, которая требует произвольногоR
? - person Holger   schedule 22.06.2021