错误不兼容类型:无法理解函数<;R、 T>;在java8中
在下面的示例代码中,我无法理解它为什么抱怨错误不兼容类型:无法理解函数<;R、 T>;在java8中,java,java-8,Java,Java 8,在下面的示例代码中,我无法理解它为什么抱怨不兼容类型:对于案例II无效的方法引用,但对于案例I无效。尽管java.awt.Color::brighter和NewBrightColor::brightColor具有类似的方法签名 public static void main(String[] args) { // CASE I Function<Color, Color> brighter = Color::brighter; //
不兼容类型:对于案例II
无效的方法引用
,但对于案例I
无效。尽管java.awt.Color::brighter
和NewBrightColor::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
}
}
publicstaticvoidmain(字符串[]args){
//案例一
功能更亮=颜色::更亮;
//案例二
函数newBrighter=NewBrightColor::brightColor;
}
类NewBrightColor{
公共颜色brightColor(){
//返回一些明亮的颜色
}
}
编辑:
我从演示文稿中选取了这个示例
根据我的理解,函数
应该只使用那些输入为R
而输出为T
的函数。但是在案例I
中它不是真的(函数要求输入颜色,但brighter()
的输入无效),但是仍然没有编译错误,但是在案例II
中它抛出编译问题。Color\brighter()
不是arg方法,而函数
需要颜色
参数-应用(颜色)
编辑
下面的示例显示了实例和静态方法引用之间的差异
Function<Color, Color> newBrighter = NewBrightColor::brightColor;
由于没有错误,它必须在传递给给定函数i的对象上调用引用的方法Color#brighter()
。e<代码>颜色.绿色
编辑
实例有两种类型(不知道):
- 对特定对象的实例方法的引用
- 对对象的任意对象的实例方法的引用 特定类型
函数upperfier=String::toUpperCase代码>
这里,隐式lambda表达式有一个参数,即
将转换为大写,它将成为
调用toUpperCase()方法
有关更多详细信息,请参阅,
泛化
此类型的方法引用被翻译为“根据函数的参数调用引用的方法”
编辑
Function brighter=Color::brighter;//c->c.c(c);
类似帖子的链接:
Color#brighter()
不是参数方法,而函数
需要颜色
参数-应用(颜色)
编辑
下面的示例显示了实例和静态方法引用之间的差异
Function<Color, Color> newBrighter = NewBrightColor::brightColor;
由于没有错误,它必须在传递给给定函数i的对象上调用引用的方法Color#brighter()
。e<代码>颜色.绿色
编辑
实例有两种类型(不知道):
- 对特定对象的实例方法的引用
- 对对象的任意对象的实例方法的引用 特定类型
函数upperfier=String::toUpperCase代码>
这里,隐式lambda表达式有一个参数,即
将转换为大写,它将成为
调用toUpperCase()方法
有关更多详细信息,请参阅,
泛化
此类型的方法引用被翻译为“根据函数的参数调用引用的方法”
编辑
Function brighter=Color::brighter;//c->c.c(c);
类似帖子的链接:
查看
颜色的签名。颜色越亮
public Color brighter();
现在看看您的方法参考:
Function<Color, Color> brighter = Color::brighter;
看看函数引用
Function<Color, Color> newBrighter = NewBrightColor::brightColor;
这将在调用newBrighter.apply(brighter,color)
时调用brighter.brightColor(color)
2) 在NewBrighter
的实例上定义函数
:
NewBrighter nb = //somehow get an instance
Function<Color, Color> newBrighter = nb::brightColor;
NewBrighter nb=//以某种方式获取一个实例
函数newBrighter=nb::brightColor;
这将在调用
newBrighter.apply(color)
时调用nb.brightColor(color)
查看color.brighter的签名
public Color brighter();
现在看看您的方法参考:
Function<Color, Color> brighter = Color::brighter;
看看函数引用
Function<Color, Color> newBrighter = NewBrightColor::brightColor;
这将在调用newBrighter.apply(brighter,color)
时调用brighter.brightColor(color)
2) 在NewBrighter
的实例上定义函数
:
NewBrighter nb = //somehow get an instance
Function<Color, Color> newBrighter = nb::brightColor;
NewBrighter nb=//以某种方式获取一个实例
函数newBrighter=nb::brightColor;
这将在调用newBrighter.apply(color)
时调用nb.brightColor(color)
但是如果我没有收到任何投诉,请检查,我已经更新了问题,这是我的错,你完全明白我的意思了。它不符合函数的定义。@subbashkumarsingh我将尝试为它找到答案this@subhashkumarsingh看看我的最新答案,希望能有所帮助。但万一我没有收到任何投诉。请