Java 推断的类型不符合上限

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.

我正在做一个项目,我必须对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()函数。我做错了什么?

更正:

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
方法一起工作)。如果你不想修改原始数组,你必须克隆值实例。我只是想说我真的很欣赏这个问题的格式