我正在做一个项目,我必须否定PPM文件(图像)的像素。
我实现了我的否定函数:
public PPMImage negate()
{
RGB[] negated = new RGB[pixels.length];
System.arraycopy(pixels, 0, negated, 0, pixels.length);
RGB[] negatedArr = Arrays.stream(negated).parallel().map(rgb -> rgb.neg(maxColorVal)).toArray(size -> new RGB[size]);
return new PPMImage(width, height, maxColorVal, negatedArr);
}
将neg(maxColorVal)
函数定义为:
public void neg(int maxColorVal)
{
R = maxColorVal - R;
G = maxColorVal - G;
B = maxColorVal - B;
}
编译代码时,出现以下错误:
error: incompatible types: inferred type does not conform to upper bound(s)
RGB[] negatedArr = Arrays.stream(negated).parallel().map(rgb -> rgb.neg(maxColorVal)).toArray(size -> new RGB[size]);
inferred: void
upper bound(s): Object
map()函数的错误点。我做错了什么?
答案 0 :(得分:2)
更正:
您的map
函数需要一个返回某种引用类型的方法,但neg
的返回类型为void
。
尝试将neg
方法更改为:
public RGB neg(int maxColorVal) {
R = maxColorVal - R;
G = maxColorVal - G;
B = maxColorVal - B;
return this;
}