我正在做一個項目,我必須否定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()函數的錯誤點。我做錯了什麼?
另外添加,RGB是包含的R值,G值,和B值,其中相結合,使一個顏色對象。此外,像素數組是PPMImage類的保護變量,它是給我的。 – 2014-12-02 09:38:16
如果'RGB'是可變的,就像你的'neg'方法所暗示的那樣,沒有必要一直拷貝數組(這樣做會產生一個危險的錯誤印象)。在完成您的操作後,所有三個數組,像素,negated和negatedArr都包含相同的修改值。如果你使用可變的'RGB'值實現,一個簡單的'Arrays.stream(pixels).parallel()。forEach(rgb - > rgb.neg(maxColorVal))'將完成整個工作(並且與原始'void neg'方法也是如此)。如果您不想修改原始數組,則必須克隆值實例。 – Holger 2014-12-02 10:10:15