Frage

Jemand weiß, wie man den Code unten mit Generika schreibt und Compiler -Warnungen vermeidet? (@Suppresswarnings ("ungeprüft") gilt als Betrug).

Und vielleicht über Generika überprüft, ob der Typ "links" der Typ "rechts" ist?

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);
    }
}
War es hilfreich?

Lösung

Dies funktioniert auch mit Unterklassen vergleichbarer Typen:

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);
  }
}

Andere Tipps

Wie wäre es damit:

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);
  }
}

Es könnte wahrscheinlich gemacht werden a wenig Ein bisschen allgemeiner, aber nur indem es es auch komplizierter macht :)

Sie können nicht über Generika prüfen, ob der Typ "links" zur Laufzeit mit dem Typ "rechts" übereinstimmt. Java Generics wird durch implementiert Typlase, Damit die Informationen über die generischen Typparameter zur Laufzeit verloren gehen.

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);
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top