【问题标题】:Inferred type does not conform to upper bound(s)推断类型不符合上限
【发布时间】:2014-12-02 09:33:08
【问题描述】:

我正在做一个项目,我必须在其中否定 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 类的受保护变量,是给我的。
  • 如果RGB 是可变的,就像你的neg 方法所建议的那样,没有必要一直复制数组(这样做会产生危险的错误印象)。操作完成后,所有三个数组 pixelsnegatednegatedArr 都包含相同的修改值。如果您继续使用可变的RGB 值实现,那么简单的Arrays.stream(pixels).parallel().forEach(rgb -> rgb.neg(maxColorVal)) 就可以完成整个工作(并且也可以使用原始的void neg 方法)。如果您不想修改原始数组,则必须克隆值实例。
  • 只是想说我非常感谢这个问题的格式

标签: java java-8


【解决方案1】:

更正:

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

尝试将您的 neg 方法更改为:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-12
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    相关资源
    最近更新 更多