2012-09-29 7 views
6

Me gustaría modificar el siguiente método para que sus argumentos puedan ser de cualquier tipo que implemente la interfaz Comparable. El tipo de retorno del método debe ser el mismo que el tipo de sus variables de parámetro.Modificar un método para que los argumentos puedan ser de cualquier tipo que implemente Comparable

public static int max(int a, int b) { 
    if (a >b) 
     return a; 
    else 
     return b; 
} 

Así que en la modificación de que, tan sólo pudiera utilizar <T extends Comparable<T>>, pero ¿cómo iba a ir sobre la fabricación de los tipos de devolver los mismos?

+1

Eres muy cerca la respuesta. Debería mostrar más de lo que ha hecho en lugar de solo decirlo. Es probable que aliente a alguien a publicar la respuesta, o hará clic. – pickypg

+0

Jaja he estado tratando de obtener estos genéricos durante los últimos 4 días estoy casi por encima de todo java genéricos cosa jaja – Chaz32621

+0

para obtener mejores resultados use '>' – newacct

Respuesta

7

¿Quieres esencialmente algo como esto:

public static <T extends Comparable<T>> T max(T a, T b) { 
    int n = a.compareTo(b); 
    if (n > 0) 
     return a; 
    if (n < 0) 
     return b; 
    return a; 
} 

Por supuesto, puede simplificar esto a la siguiente (gracias a @pickypg para la notificación):

public static <T extends Comparable<T>> T max(T a, T b) { 
    return a.compareTo(b) < 1 ? b : a; 
} 
+1

¿Por qué devolvería 'nulo' cuando están ¿igual? Devuelva cualquiera de las dos, de lo contrario su definición de 'max' es un poco inestable. – pickypg

+0

Eso no está bien. ¿Cómo crees que funciona 'Math.max'? – pickypg

+0

@ A.R.S .: Obviamente, la semántica exacta tendría que depender del caso de uso, pero creo que devolver nulo sería bastante sorprendente (y requerir código adicional para una cláusula de guardia) para la mayoría de los propósitos. –

Cuestiones relacionadas