我想编写一个泛型方法(使用泛型或参数)
这将取代以下两个调用:
private ServerEvent filterEvents() {
return argThat(new ArgumentMatcher<ServerEvent>() {
@Override
public boolean matches(Object argument) {
return argument instanceof Type1;
}
});
private ServerEvent filterEvents() {
return argThat(new ArgumentMatcher<ServerEvent>() {
@Override
public boolean matches(Object argument) {
return argument instanceof Type2;
}
});
我已经尝试过了,但是出现了编译错误:
private <T> ServerEvent filterEvents() {
return argThat(new ArgumentMatcher<ServerEvent>() {
@Override
public boolean matches(Object argument) {
return argument instanceof T;
}
});
更新:
我也尝试过此操作,但仍然出现编译错误:
verify(loggerUtilsWrapper).writeEvent(filterEvents(MatchNotFoundEvent.class));
private ServerEvent filterEvents(final Class<MatcherEvent> eventType) {
return argThat(new ArgumentMatcher<ServerEvent>() {
@Override
public boolean matches(Object argument) {
return argument instanceof eventType;
}
});
}
由于运行时类型擦除,因此“ T”不可用。标准方法是通过type参数传递类型令牌Class<T>
。
但是,在这种情况下,您不需要泛型,因为您实际上并没有使用该类型。相反,只需传递一个Class对象并对其进行比较:
private ServerEvent filterEvents(final Class<?> c) {
return argThat(new ArgumentMatcher<ServerEvent>() {
@Override
public boolean matches(Object argument) {
return c.isInstance(argument);
}
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句