Очевидно, что дочерний элемент Input создается с path
и реализующим шаблоном. Вероятно, этот объект передается окружающему классу и вызывает template
, передавая Json
данные.
Абстрактный метод можно так же легко заменить на Function<Json, String>
, но тогда эта функция пропустит path
, так что можно использовать BiFunction<String, Json, String>
.
Вы должны посмотреть, откуда и когда пришел путь и Json. Здесь это кажется немного искусственным. Вместо статического внутреннего класса, как указано выше, традиционным (очень похожим) шаблоном будет:
abstract class A {
public final void func() { // Some service offered by this class.
B b = ...;
C c = onFunc(b);
}
abstract protected C onFunc(B b); // Some requirement to implement.
}
- Здесь
func
для пользователей службы A. - И
onFunc
предназначен для того, чтобы разработчики A выполняли определенное требование.
Так что из контекста, как в вашем случае, это немного странно или слишком сложно. Казалось бы, просто передать функцию обратного вызова.