gpt4 book ai didi

java - java8 中的错误不兼容类型 : Not able to understand Function

转载 作者:行者123 更新时间:2023-11-29 07:30:22 33 4
gpt4 key购买 nike

在下面的示例代码中,我无法理解为什么它会提示 incompatible types: invalid method reference对于 case II但不适用于 case I .虽然 java.awt.Color::brighterNewBrightColor::brightColor具有相似的方法签名。

public static void main(String[] args) {

// CASE I
Function<Color, Color> brighter = Color::brighter;

// CASE II
Function<Color, Color> newBrighter = NewBrightColor::brightColor;

}

class NewBrightColor {
public Color brightColor() {
// return some Bright color
}
}

编辑:

我从演示文稿 https://youtu.be/e4MT_OguDKg?t=31m58s 中选取了这个示例

据我了解,Function<R,T>应该只采用那些输入为 R 的函数输出是T .但是在case I这不是真的(Function<Color, Color> 期望颜色作为输入,但 brighter() 的输入无效),但仍然没有编译错误,但在 case II 中它会引发编译问题。

最佳答案

查看Color.brighter的签名

public Color brighter();

现在看看你的方法引用:

Function<Color, Color> brighter = Color::brighter;

因此,当我调用 brighter.apply(color) 时,我会调用 color.brighter 并返回结果。

现在看一下 NewBrightColor.brightColor 的方法签名:

public Color brightColor(Color color)

并查看函数引用

Function<Color, Color> newBrighter = NewBrightColor::brightColor; 

当我调用 newBrighter.apply(colour) 时,我需要在 NewBrighter实例 上调用 brightColor并返回结果。

所以我有一个参数缺失 - 我需要一个Color来使亮度更亮*并且**我需要我想调用的NewBrightColor brightColor开启,传入颜色。


所以,你可以

1) 使用 BiFunction 传递实例:

BiFunction<NewBrightColor, Color, Color> newBrighter = NewBrightColor::brightColor

这将在调用 newBrighter.apply(brighter, color) 时调用 brighter.brightColor(color)

2) 在 NewBrighter 实例上定义 Function:

NewBrighter nb = //somehow get an instance
Function<Color, Color> newBrighter = nb::brightColor;

这将在调用 newBrighter.apply(color) 时调用 nb.brightColor(color)

关于java - java8 中的错误不兼容类型 : Not able to understand Function<R, T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43679520/

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