gpt4 book ai didi

java - 指定 before/after::operator 的通用方法引用类型

转载 作者:太空狗 更新时间:2023-10-29 22:39:35 25 4
gpt4 key购买 nike

下面的方法引用有什么区别,

BiPredicate<List<String>,String> contains1 = List<String>::contains;

BiPredicate<List<String>,String> contains2 = List::<String>contains;

BiPredicate<List<String>,String> contains3 = List<String>::<String>contains;

案例有特殊名称吗?有类似用法的例子吗?

最佳答案

首先,这称为类型见证(in the official Oracle Tutorial)或TypeArguments(在JLS Sec 15.12 中),您正在有效地帮助编译器进行此类操作结构体。

一个例子:

private static void test(Callable<Object> call) {

}

private static void test(Runnable run) {

}

static class Gen<T> {

}

然后通过 test(Gen::new); 调用它(这会失败,不管为什么),但关键是你添加了一个type witness来帮助编译器,所以这会起作用

test(Gen<String>::new);

所以当你写List<String> ,您已经为目标类型添加了类型见证 - List那是;在第二种情况下,您要为方法添加一个 contains - 但它不是通用的,因此被忽略。

关于java - 指定 before/after::operator 的通用方法引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51786658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com