J'essaie de soustraire la valeur d'un tableau fourni (matrice 2D). Je voudrais faire en utilisant des génériques. Quelqu'un peut-il aider ce qui ne va pas avec mon code? Je veux dire, ai-je besoin d'étendre une classe? Je reçois l'erreur (l'opérateur - n'est pas défini pour le type d'argument T, T)
Merci d'avance. P>
//this method Subtracts Value from the given Matrix for all the rows but for given columns
private <T> void subtractValueFromColumns(T[][] matrix,
ArrayList<Integer> columnsIndex, T value) {
for(int i = 0; i < matrix.length; i++){
for(int j = 0; j < columnsIndex.size(); j++){
matrix[i][j] = matrix[i][j] - value;
}
}
}
3 Réponses :
Vous devez définir des opérations et des méthodes pouvant être utilisées sur ce type donné.
public class Vector2 implements Serializable, Vector<Vector2> {
@Override
public Vector2 scl (float x, float y) {
this.x *= x;
this.y *= y;
return this;
}
@Override
public Vector2 add (Vector2 v) {
x += v.x;
y += v.y;
return this;
}
}
Vous ne pouvez pas le faire sans casting (ce qui signifie plus ou moins que les génériques sont inutiles ici).
L'opérateur comme solution de contournement, je peux suggérer d'utiliser le type Ceci a un effet inconvénient, cependant. Afin d'utiliser la méthode correctement, vous serez obligé de convertir vos variables numériques en - code> ne peut être appliqué qu'aux types numériques, mais à la compilation-time Le compilateur ne peut pas être conscient du type d'exécution du type générique t code>. p>
bigdecimal code> et ses méthodes arithmétiques imbriquées (comme .Subrent () code>) p>) BigDecimal code> et vice-versa p> p>
Vous pouvez toutefois restreindre Une autre possibilité est de laisser les clients de cette méthode définir comment l'opération fonctionne comme: p> - code> est défini uniquement pour quelques types tels que int code> et ceux qui peuvent être convertis / non compressés comme integer code>. La soustraction ne fonctionnera pas avec des types génériques puisque Java n'a aucun moyen de savoir si un type t code> peut être converti en par exemple. int code>. Java n'a également pas de surcharge de l'opérateur, ce qui signifie que vous ne pouvez pas définir une signification pour cet opérateur ultérieurement sur des types arbitraires. t code> à quelque chose qui a par exemple un moins (t autre) code> méthode et utilisez cela à la place. Vous pouvez également utiliser numéro code> au lieu de t code> et utiliser le .doublevalue () code> pour faire votre mathématique. P>
Alors, que se passe-t-il si j'appelle:
Soustraire la valeur des colonnes (nouvelle chaîne [] [] [] {{"A", "B", "C"}, {"D", "F"}} , nouvelle arraylist (), "Z") code>?