Type inféré n'est pas conforme à la limite supérieure(s)
Je suis en train de faire un projet dans lequel je dois annuler les pixels d'un fichier PPM (image).
J'ai mis en place mon annuler la fonction en tant que telle:
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);
}
Avec le neg(maxColorVal)
fonction étant définie comme ceci:
public void neg(int maxColorVal)
{
R = maxColorVal - R;
G = maxColorVal - G;
B = maxColorVal - B;
}
Quand je compile le code, j'obtiens l'erreur suivante:
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
L'erreur de points à la carte() fonction. Ce que je fais mal?
Aussi d'ajouter, RVB est un objet qui contient une valeur de R, G valeur, et la valeur B, qui se combinent pour faire une couleur. Aussi, la gamme de pixels est un protégé de la variable de la PPMImage classe, qui m'est donnée.
Si
Je voulais juste dire que j'ai vraiment apprécier la mise en forme sur cette question
Si
RGB
est mutable, comme votre neg
méthode suggère, il n'est pas nécessaire de copier le tableau de tous les temps (et cela crée un niveau dangereusement fausse impression). À la fin de votre opération, tous les trois tableaux, pixels
, negated
, et negatedArr
contiennent les mêmes, les valeurs modifiées. Si vous restez avec la mutable RGB
valeur de mise en œuvre, un simple Arrays.stream(pixels).parallel().forEach(rgb -> rgb.neg(maxColorVal))
serait de faire tout le travail (et travaille avec l'original void neg
méthode). Si vous ne voulez pas modifier le tableau d'origine, vous devez cloner la valeur des instances.Je voulais juste dire que j'ai vraiment apprécier la mise en forme sur cette question
OriginalL'auteur Jeffrey Tai | 2014-12-02
Vous devez vous connecter pour publier un commentaire.
Correction :
Votre
map
fonction attend une méthode qui renvoie une référence de type, maisneg
a unvoid
type de retour.Essayez de changer votre
neg
méthode :OriginalL'auteur Eran