我试图通过将对象传递给“验证器”来验证库中的结果,其中验证器验证结果是否为空,并随后将传递的对象返回给调用方。例如:
public class ResultValidator {
public static <T> Collection<T> validate(Collection<T> result, Class<T> type) throws EmptyResultException {
if (result.isEmpty()) {
throw new EmptyResultException();
}
return result;
}
}
调用方将调用以下内容:
return ResultValidator.validate(listAll(), Employee.class);
我知道参数绑定发生在运行时,这就是编译器抛出这个错误的原因。我正试图避免使用显式类型创建多个方法,而宁愿捕获实现collection
的所有类型。
在不上传或创建多个显式类型重载方法的情况下,有没有其他方法可以做到这一点?
如果您的意图是返回“自我”,那么:
public static <T, C extends Collection<T>> C validate(C result, Class<T> type) {
// note that requiring a `Class<T>` is a code smell...
if (result.isEmpty()) throw new EmptyResultException();
return result;
}
List<String> list = ...;
list = validate(list, String.class);
现在工作很好,但请注意,不可能创建一个新的C
实例。您要么直接返回result
,因此validate
返回的事实充其量只是一些代码/API的便利性,但本质上并不有用,要么您不能使用它,您需要一个“make a new collection”工厂。这将使您:
public static <T, C extends Collection<T>> C validate(C result, Class<T> type, Supplier<C> collectionMaker) {
...
}
调用方必须提供一些东西。例如:
List<String> list = ...;
validate(list, String.class, () -> new ArrayList<String>());
用以下方法对物体进行成像:
问题内容: 原始列表将转换为正常。为什么原始列表的列表不能转换为的列表? 背景故事 (以减轻xy问题): 我正在使用return的API 。我碰巧知道它一直都是。我计划循环并构建自己的循环,但是我在尝试编写时试图修复(但不禁止)原始类型编译器警告。 我试过了: 但是这些会导致类型不匹配错误。 有趣的是,这没有给出警告或错误: 问题答案: // #1 (does compile) List raw
问题内容: 问题 与新HashSet(Collection)等效的Scala)相关,如何将Java集合(例如)转换为Scala集合? 我实际上是在尝试将Java API调用转换为Spring的 (返回a )成Scala不可变。因此,例如: 这似乎有效。欢迎批评! 问题答案: 您的最后一条建议有效,但您也可以避免使用: 请注意,默认情况下,由于提供了此功能。
假设我有一个名为student的对象列表。对象Student的定义如下 在学生列表中,可以有多个具有相同studentName但不同CourseTaking的学生对象。现在我想把学生名单变成一张studentName和courseTaking的地图,如下所示 关键是studentName,而值是将同一学生的所有课程设置放在一起作为一个集合。我如何使用stream()&collection()来实现
我在我的项目中使用spring webflux与外部API进行通信。在我的项目中,我无法将Flux转换为List。 在尝试对collectList().block()执行同样的操作时,flux的所有元素都被连接到一个字符串中,并存储在List的第0个索引处。如果我返回Flux而不是List,那么它会发送预期的响应。但我需要操作内容并将其作为子对象添加到其他对象中&因此尝试返回列表。 预期结果:[“
我有一个方法createCompliance响应(),它返回BOLConplationObject对象,在此之前,我将其更改为BOLConplationMono,因为我必须在其中调用另一个反应性服务。但是在这样做之后,我调用该服务的当前服务在第6行和第7行出现错误。 我为其更改了退货类型的另一项服务是