Java8重载能否区分函数参数参数类型?
Can Java 8 overloads differentiate between function parameter argument types?
我正在将 kotlin class 注入到我的 java 代码中。 kotlin class 有两个签名几乎相同的方法:
fun <R> isFluxAuthorizedFor(
strings: List<StringRequest>,
then: (responses: List<StringResult>) -> Flux<R>
): Flux<R>
和
fun <R> isFluxAuthorizedFor(
string: StringRequest,
then: (per: StringResult) -> Flux<R>
): Flux<R> {
kotlin class 支持这种重载。
但是,让我的 IDE 使用正确的方法让我费了好大的劲。我有一个匹配前者签名的方法:
private Flux<AuthorizedStrings> collectResults(List<StringResult> responses)
{
//not yet implemented
return null;
}
然而,当我尝试调用注入的 class' 方法时,出现编译错误:
List<StringRequest> allStrings = new ArrayList<StringRequest>();
Flux<UserReadAuthorizations> test = authCheck.isFluxAuthorizedFor(allStrings, (it) -> this.collectResults(it) );
IDE提出两个建议:
"change type of 'it' to 'List<StringResult>'"
"change method 'collectResults(List<StringResult>)' to 'collectResults(StringResult)'"
两者都暗示 Java(或至少编译器)无法弄清楚我正在尝试调用 other 方法。这是尝试集成 Java 8 和 Kotlin 的问题吗? IDE 的怪癖? (我正在使用 Spring Tool Suite)一些愚蠢的用户错误,我还没有能够通过橡皮鸭?
我玩过你的代码,发现 IntelliJ 绊倒了整个 lambda 的类型。我不得不将 it -> this.collectResults(it)
转换为 Kotlin 期望的类型:
List<StringRequest> allStrings = new ArrayList<>();
Flux<UserReadAuthorizations> test = authCheck.isFluxAuthorizedFor(
allStrings,
(Function1<List<StringResult>, Flux<AuthorizedStrings>>) (it -> this.collectResults(it))
);
您方法本身的签名不是问题。希望这对你的STS也有帮助。
我正在将 kotlin class 注入到我的 java 代码中。 kotlin class 有两个签名几乎相同的方法:
fun <R> isFluxAuthorizedFor(
strings: List<StringRequest>,
then: (responses: List<StringResult>) -> Flux<R>
): Flux<R>
和
fun <R> isFluxAuthorizedFor(
string: StringRequest,
then: (per: StringResult) -> Flux<R>
): Flux<R> {
kotlin class 支持这种重载。
但是,让我的 IDE 使用正确的方法让我费了好大的劲。我有一个匹配前者签名的方法:
private Flux<AuthorizedStrings> collectResults(List<StringResult> responses)
{
//not yet implemented
return null;
}
然而,当我尝试调用注入的 class' 方法时,出现编译错误:
List<StringRequest> allStrings = new ArrayList<StringRequest>();
Flux<UserReadAuthorizations> test = authCheck.isFluxAuthorizedFor(allStrings, (it) -> this.collectResults(it) );
IDE提出两个建议:
"change type of 'it' to 'List<StringResult>'"
"change method 'collectResults(List<StringResult>)' to 'collectResults(StringResult)'"
两者都暗示 Java(或至少编译器)无法弄清楚我正在尝试调用 other 方法。这是尝试集成 Java 8 和 Kotlin 的问题吗? IDE 的怪癖? (我正在使用 Spring Tool Suite)一些愚蠢的用户错误,我还没有能够通过橡皮鸭?
我玩过你的代码,发现 IntelliJ 绊倒了整个 lambda 的类型。我不得不将 it -> this.collectResults(it)
转换为 Kotlin 期望的类型:
List<StringRequest> allStrings = new ArrayList<>();
Flux<UserReadAuthorizations> test = authCheck.isFluxAuthorizedFor(
allStrings,
(Function1<List<StringResult>, Flux<AuthorizedStrings>>) (it -> this.collectResults(it))
);
您方法本身的签名不是问题。希望这对你的STS也有帮助。