Java 推断的类型不符合上限
我正在做一个项目,我必须对PPM文件(图像)的像素求反 我实现了否定函数,如下所示:Java 推断的类型不符合上限,java,java-8,Java,Java 8,我正在做一个项目,我必须对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.
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()函数。我做错了什么?更正:
map
函数需要返回某个引用类型的方法,但neg
的返回类型为void
尝试将neg
方法更改为:
public RGB neg(int maxColorVal) {
R = maxColorVal - R;
G = maxColorVal - G;
B = maxColorVal - B;
return this;
}
同样要添加的是,RGB是一个包含R值、G值和B值的对象,它们组合在一起形成颜色。此外,像素阵列是PPMImage类的一个受保护的变量,这是给我的。如果
RGB
是可变的,就像你的neg
方法所建议的那样,就不需要一直复制阵列(这样做会产生危险的错误印象)。操作完成后,所有三个数组,像素
,已求反
和已求反
都包含相同的修改值。如果您继续使用可变的RGB
值实现,那么一个简单的Arrays.stream(pixels.parallel().forEach(RGB->RGB.neg(maxColorVal))
将完成整个工作(并与原始的void neg
方法一起工作)。如果你不想修改原始数组,你必须克隆值实例。我只是想说我真的很欣赏这个问题的格式