Pregunta

¿Alguien sabe cómo escribir el siguiente código utilizando genéricos Y evitando las advertencias del compilador? (@SuppressWarnings (" desmarcado ") se considera trampa).

Y, tal vez, comprobando a través de genéricos que el tipo de '' dejó '' es el mismo que el tipo de "derecho" ?

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);
    }
}
¿Fue útil?

Solución

Esto también funciona con subclases de tipos 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);
  }
}

Otros consejos

¿Qué tal esto?

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

Probablemente podría hacerse un poco un poco más general, pero solo haciéndolo más complicado también :)

No puede verificar mediante genéricos si el tipo de 'izquierda' es el mismo que el tipo de 'derecha' en tiempo de ejecución. Los genéricos de Java se implementan a través de tipo de borrado , para que la información sobre los parámetros de tipo genérico se pierde en tiempo de ejecución.

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);
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top