Question

Quelqu'un sait comment écrire le code ci-dessous en utilisant des génériques ET en évitant les avertissements du compilateur? (@SuppressWarnings ("décoché") est considéré comme de la triche).

Et, peut-être, en vérifiant via des médicaments génériques que le type de "gauche" correspond au type de " right " ?

public void assertLessOrEqual(Comparable left, Comparable right) {
    if (left == null || right == null || (left.compareTo(right) > 0)) {
        String msg = "["+left+"] is not less than ["+right+"]";
        throw new RuntimeException("assertLessOrEqual: " + msg);
    }
}
Était-ce utile?

La solution

Ceci fonctionne également avec les sous-classes de types comparables:

public <T extends Comparable<? super T>> void assertLessOrEqual(T left, T right) {
  if (left == null || right == null || left.compareTo(right) > 0) {
    String msg = "["+left+"] is not less than ["+right+"]";
    throw new RuntimeException("assertLessOrEqual: " + msg);
  }
}

Autres conseils

Que diriez-vous de cela:

public <T extends Comparable<T>> void assertLessOrEqual(T left, T right) {
  if (left == null || right == null || (left.compareTo(right) > 0)) {
    String msg = "["+left+"] is not less than ["+right+"]";
    throw new RuntimeException("assertLessOrEqual: " + msg);
  }
}

Cela pourrait probablement être peu plus général, mais seulement en le rendant plus compliqué:)

Vous ne pouvez pas, via les génériques, vérifier si le type de «gauche» est identique à celui de «droite» au moment de l'exécution. Les génériques Java sont implémentés via type effacement , de sorte que les informations sur les paramètres de type générique sont perdues à l'exécution.

public <T extends Comparable<T>> void assertLessOrEqual(T left, T right) {
    if (left == null || right == null || (left.compareTo(right) > 0)) {
        String msg = "["+left+"] is not less than ["+right+"]";
        throw new RuntimeException("assertLessOrEqual: " + msg);
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top