punto de vista técnico, que CAN uso instanceof
para comprobar si un objeto es un tipo determinado.
Sin embargo ... Eso es NOT una buena idea.
La forma en que se ha declarado su método, que puede aceptar una lista de cualquier tipo, por lo que no es necesariamente va a ser A o B.
Es difícil saber lo que estás tratando de hacer , pero probablemente debas hacer que tu método sea genérico.
Puede hacerlo de esta manera:
public static <T> String method(List<T> arg) {
// We now know that the type of the list is T, which is
// determined based on the type of list passed to this
// method. This would demonstrate the point better if
// the return type was T, but I'm leaving the return type
// as String, because that's what your code returns.
}
Aquí hay un ejemplo mejor:
Si desea crear un método genérico que se devuelve el primer elemento de una lista, lo haría así:
public static <T> T firstElement(List<T> theList) {
if (theList == null) {
return null;
}
T objectOfTypeT = theList.get(0);
return objectOfTypeT;
}
Tenga en cuenta que el retorno tipo ahora es T
.
Como hemos hecho este método genérico, puede devolver el mismo tipo que se utiliza en la Lista.
Normalmente solo devolvería theList.get(0)
, pero agregué una línea para hacer más obvio el propósito de los genéricos.
Explicación de la sintaxis:
El <T>
indica que este método toma un parámetro de tipo llamado T.
El T
que sigue inmediatamente es el tipo de retorno (al igual que lo haría normalmente return String, Integer, etc ...).
El T
en el parámetro Lista es como el compilador sabe qué diablos es T
.
Esto permite que el compilador para decir: "Este método espera algo de tipo T. Oh, mira ... La lista es también de tipo T. Si alguien pasa una lista de cadenas de este método, que T debe ser una cadena. Si alguien pasa una lista de números enteros a este método, T debe ser un entero. "
por el contrario, el método puede única devolver una cadena y no tiene idea de qué tipo se utiliza en la lista.
también ...
Si A y B se usan para extender la misma clase, llamada TheParentClass, se podría declarar su método como este:
public static String method(List<? extends TheParentClass> arg)
De esa manera, sabrías un poco más sobre los tipos posibles de su parámetro (y puede beneficiarse de la verificación del tipo de tiempo de compilación).
Declarar el tipo de parámetro como '>' significa exactamente que no está interesado en el tipo real. – biziclop
duplicado de este http://stackoverflow.com/questions/1942644/get-generic-type-of-java-util-list – evanwong
@evanwong - no estoy seguro si estaría de acuerdo con que es un engaño. – djangofan