推断类型不符合上限

时间:2014-12-02 09:33:09

标签: 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.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()函数的错误点。我做错了什么?

1 个答案:

答案 0 :(得分:2)

更正:

您的map函数需要一个返回某种引用类型的方法,但neg的返回类型为void

尝试将neg方法更改为:

public RGB neg(int maxColorVal) {
    R = maxColorVal - R;
    G = maxColorVal - G;
    B = maxColorVal - B;
    return this;
}