我正在编写一个方法,旨在递归地搜索嵌套集合中的值并返回包含该值的集合:
@SuppressWarnings("unchecked")
public static <E,
R extends Collection<? extends E>> Optional<R> findRecursively(Collection<?> collection, E element)
throws ClassCastException {
if (collection.isEmpty())
return Optional.ofNullable(null);
boolean nested = collection.stream()
.allMatch(e -> isSubclass(e.getClass(), Collection.class));
for (Object c : collection) {
R result;
if (nested) {
Optional<R> recursiveResult = findRecursively((Collection<?>) c, element);
result = recursiveResult.orElse(null);
} else {
result = c.equals(element) ? (R) collection : null;
}
if (result != null)
return Optional.of(result);
}
return Optional.ofNullable(null);
}
这很好,但当我使用该方法时,如果不先将返回的可选项赋给如下变量,我就无法直接处理它:
Collection<String> collection = null;
Set<String> set = Util.findRecursively(collection, "")
.orElseThrow(RuntimeException::new);
在这种情况下,编译器无法知道方法的返回类型。我不知道有什么好的可能使它生效。
我想出了另外两种方法,也不是很好:
>
public static <E,
R extends Collection<E>> Optional<R> findRecursively(Collection<?> collection,
E element,
Class<R> returnType) {...
但我不喜欢这样,因为额外的参数(实际上)是不必要的,并且使方法不容易理解。
而不是可选,我只返回集合对象。但在这种情况下,我不能直接创建可选并像这样调用它:
Collection<String> collection = null;
Set<String> set = Optional.ofNullable(Util.findRecursively(collection, ""))
.orElseThrow(RuntimeException::new);
因为这里编译器又不知道返回类型,并且无法将类型参数推断为()方法的。
有人知道这个问题的好办法吗?或者建议你怎么走?
您可以在同一行中声明具体类型,而无需声明变量:
Util.<Collection, String, Set<String>>findRecursively(collection, "")...
本文向大家介绍Python函数返回不定数量的值方法,包括了Python函数返回不定数量的值方法的使用技巧和注意事项,需要的朋友参考一下 Python的函数是可以return多个值的,但其本质上还是返回单个值,只是利用了tuple的自动打包,将多个值打包成单个tuple返回。 使用代码验证: 运行结果,确认返回的是一个tuple, 稍微修改代码: 代码中利用了tuple的自动解包,将tuple的值分
我正在等待(从USSD请求中)检索一个值,以便返回它(getUSSD):
我相信这是一个愚蠢的问题,但我已经讨论了很久了。。我试图创建一个java程序,根据用户输入的年数和金额计算复利。但我一直遇到一个错误,void方法无法返回值。因此,我将方法切换为double,因为这是将返回的内容,但它告诉我double方法必须返回double。即使我在循环中返回一个双倍。。。请帮忙
可选的用于表示可为空的对象,该类的一些用途包括 作为方法返回类型,作为返回null以 表示没有可用值的替代方法 区分“未知”(例如,不存在于映射中)和“已知无值”(存在于映射中,具有值 optional.缺席()) 将可为null的引用包装起来存储在不支持null的集合中(不过有几种其他方法应该首先考虑) 对于第一种情况,我是否需要在所有可为空的返回方法中返回可选的?
问题内容: 重写的方法可以有不同的返回类型吗? 问题答案: Java支持*协变返回类型的重写方法。这意味着重写的方法可能具有更特定的返回类型。也就是说,只要新的返回类型可分配给你要覆盖的方法的返回类型,就可以使用。 例如: 这在Java语言规范的8.4.5节中指定: 如果返回类型是引用类型,则返回类型在彼此覆盖的方法之间可能会有所不同。返回类型可替换性的概念支持协变返回,即返回类型到子类型的特殊化
我创建了spring boot 2.0演示应用程序,其中包含两个使用WebClient进行通信的应用程序。当我从WebClient的响应中使用Flux的block()方法时,它们经常停止通信。由于某些原因,我想使用列表而不是通量。 服务器端应用程序是这样的。它只返回Flux对象。 而客户端(或BFF端)应用程序是这样的。我从服务器获取Flux,并通过调用block()方法将其转换为List。 虽然