记录的通用方法
Generic method for logging
我想创建一个通用的日志记录方法,它可以采用任何类型并根据 Predicate
进行记录。
这是日志方法(我把它们放在一个map
中,以便稍后处理):
private void logIf(Predicate<T> p, T t, PersonId id, String message) {
if (p.test(t)) {
logMap.put(id, message);
}
}
我正在尝试按如下方式使用它(我们有自己的日期 class 称为 DatumA
):
logIf(d -> d.nollKoll(), o1.getEndDate(), id, "Datum contains year, month or day with value 0.");
..where o1.getEndDate()
returns a DatumA
object which has the method nollKoll()
which returns a boolean
.
编译器抱怨:
The method logIf(Predicate<T>, T, PersonId, String) in the type
SkapaKundMasterData<T> is not applicable for the arguments
(Predicate<T>, DatumA, PersonId, String)
我怎样才能使这个工作?
由于您的 logIf
方法是 private
,您必须从同一个 class (SkapaKundMasterData
).
中调用它
但是,在 SkapaKundMasterData
class 中,T
可以是任何东西(取决于您如何实例化特定的 SkapaKundMasterData
实例)。因此,您不能在预期 T
的地方传递 DatumA
实例。
例如,假设您创建了一个实例:
SkapaKundMasterData<String> instance = new SkapaKundMasterData<>();
在这种情况下,logIf(Predicate<T>, T, PersonId, String)
需要 Predicate<String>
、String
、PersonId
和 String
类型的参数,但您传递的是 Predicate<DatumA>
和 DatumA
.
如果您希望该方法起作用,请考虑将类型参数移动到方法中(或者如果您仍然需要 class 级别的 T
参数,则添加一个新的类型参数)。
例如:
private <S> void logIf(Predicate<S> p, S t, PersonId id, String message) {
if (p.test(t)) {
logMap.put(id, message);
}
}
我想创建一个通用的日志记录方法,它可以采用任何类型并根据 Predicate
进行记录。
这是日志方法(我把它们放在一个map
中,以便稍后处理):
private void logIf(Predicate<T> p, T t, PersonId id, String message) {
if (p.test(t)) {
logMap.put(id, message);
}
}
我正在尝试按如下方式使用它(我们有自己的日期 class 称为 DatumA
):
logIf(d -> d.nollKoll(), o1.getEndDate(), id, "Datum contains year, month or day with value 0.");
..where o1.getEndDate()
returns a DatumA
object which has the method nollKoll()
which returns a boolean
.
编译器抱怨:
The method logIf(Predicate<T>, T, PersonId, String) in the type
SkapaKundMasterData<T> is not applicable for the arguments
(Predicate<T>, DatumA, PersonId, String)
我怎样才能使这个工作?
由于您的 logIf
方法是 private
,您必须从同一个 class (SkapaKundMasterData
).
但是,在 SkapaKundMasterData
class 中,T
可以是任何东西(取决于您如何实例化特定的 SkapaKundMasterData
实例)。因此,您不能在预期 T
的地方传递 DatumA
实例。
例如,假设您创建了一个实例:
SkapaKundMasterData<String> instance = new SkapaKundMasterData<>();
在这种情况下,logIf(Predicate<T>, T, PersonId, String)
需要 Predicate<String>
、String
、PersonId
和 String
类型的参数,但您传递的是 Predicate<DatumA>
和 DatumA
.
如果您希望该方法起作用,请考虑将类型参数移动到方法中(或者如果您仍然需要 class 级别的 T
参数,则添加一个新的类型参数)。
例如:
private <S> void logIf(Predicate<S> p, S t, PersonId id, String message) {
if (p.test(t)) {
logMap.put(id, message);
}
}