Мой первый ответ предполагает, что вам не нужно ничего, кроме исходного кода, который вы отправили для компиляции; с наименьшим количеством изменений. Таким образом, этот ответ касается только этого предположения.
Это другой ответ, потому что он делает другое предположение; и требует более одного изменения кода.
Допущение : Вы абсолютно должны иметь статус c method?
Вы можете получить это с помощью следующих рефакторов:
Добавьте интерфейс Validatible
...
public interface Validatible{
boolean isValid();
}
Марка User
a Validatiable
…
public class User implements Validatible{
...
@Override
public boolean isValid(){
...
}
...
}
Упростить Validator
…
public interface Validator {
ValidationResult validate(Validatible input);
}
Переместите must-have static
метод в служебный / вспомогательный класс…
public class DeduperAnswer {
static Validator validate(Predicate<Validatible> tester, String error) {
return user ->
tester.test(user) ? ValidationResult.valid() :
ValidationResult.invalid(error);
}
...
}
Затем вы можете вызвать DeduperAnswer.validate()
, как я в этой демонстрации …
Validator butWhatThen = DeduperAnswer.validate((user) -> { return user.isValid(); }, "not valid");
Но, как я спросил в комментариях, после того, как вы вернетесь, Validator
из вызова метода static
, Что вы собираетесь с ним делать тогда?
Я сделал предположения, которые сделал, потому что не на 100% ясно, каков ваш конкретный вариант использования. Было бы очень полезно, если бы вы этим поделились.