Если вы добавляете параметр к методу getServiceStatus
в своем интерфейсе, конкретные реализации также должны добавить этот параметр, и - что более важно - вызывающие этого метода должны знать, какой аргумент предоставить.
Поэтому, во-первых, не добавляйте параметр в этот интерфейс (по крайней мере, в этом небольшом сценарии это не нужно)!
Чтобы избежать дублирования кода, вы можете добавить промежуточный абстрактный класс, содержащий код:
abstract class Z {
final StatusEntry getServiceStatus(Supplier<StatucBType> statusProvider) throws Exception {
StatusEntry result = new StatusEntry();
ServiceStatus status;
try {
status = statusProvider.get().getStatus();
} catch (Exception e) {
}
result.Status(status);
return result;
}
}
Затем используйте его следующим образом:
class A implements C extends Z {
private StatucBType getSatusA() {...}
@Override
public StatusEntry getServiceStatus() throws Exception {
return getServiceStatus(this::getStatusA);
}
}