Поскольку ваш метод logIf
равен private
, вы должны вызывать его из того же класса (SkapaKundMasterData
).
Однако в пределах класса SkapaKundMasterData
, T
может бытьчто угодно (в зависимости от того, как вы создаете конкретный экземпляр SkapaKundMasterData
).Поэтому вы не можете передать экземпляр DatumA
, где ожидается T
.
Предположим, например, что вы создаете экземпляр:
SkapaKundMasterData<String> instance = new SkapaKundMasterData<>();
В этом случае logIf(Predicate<T>, T, PersonId, String)
потребуются аргументы типов Predicate<String>
, String
, PersonId
и String
, но вы передаете Predicate<DatumA>
и DatumA
.
Если вы хотите, чтобы метод работалрассмотрите возможность перемещения параметра типа в метод (или добавление нового параметра типа, если вам все еще нужен параметр T
на уровне класса).
Например:
private <S> void logIf(Predicate<S> p, S t, PersonId id, String message) {
if (p.test(t)) {
logMap.put(id, message);
}
}