Dado el siguiente código no muy útil:métodos genéricos y Tipo Inferencia en Java
package com.something;
import java.util.ArrayList;
import java.util.Collection;
//Not a generic class!
public class Test {
public <T> void plain(T param1, T param2) {}
public <T> void fancy(T param1, Collection<T> param2) {}
public void testMethod() {
//No error
fancy("", new ArrayList<String>());
//Compiler error here!
fancy("", new ArrayList<Integer>());
//No error
plain("", new ArrayList<Integer>());
}
}
(Por favor, corrija mi entendimiento si está mal!)
La segunda llamada a fancy()
es un error del compilador porque Java no puede deducir cualquier tipo común entre los dos argumentos (no se puede inferir Object
desde el segundo parámetro debe ser un Collection
.)
la llamada a plain()
es no un error del compilador porque Java infiere el tipo común de Object
entre los dos argumentos.
Recientemente encontré el código que tenía una firma de método similar a plain()
.
Mi pregunta es la siguiente:
es la firma plain()
's útil para algo?
Quizás la persona que escribió el código pensó que la firma de plain()
haría que ambos parámetros tengan el mismo tipo en tiempo de compilación, lo que obviamente no es el caso.
¿Hay alguna diferencia o beneficio de escribir un método con una firma como plain()
en lugar de definir ambos parámetros como Object
s?
programación genérica real es simplemente existir en Java. – texasbruce