Mientras leía el tutorial oficial de Java sobre genéricos, descubrí que puede restringir el argumento de tipo (en este caso es T
) para extender una clase y / o más interfaces con el operador 'y' ( &
) de esta manera:
<T extends MyClass & Serializable>
Reemplacé el &
con ,
(por error y todavía funciona, con una advertencia menor).
Mi pregunta es, ¿hay alguna diferencia entre estos dos?
<T extends MyClass & Serializable>
<T extends MyClass , Serializable> // here is with comma
Y el método de ejemplo:
static <T extends MyClass & Serializable> ArrayList<T> fromArrayToCollection(T[] a) {
ArrayList<T> arr = new ArrayList<T>();
for (T o : a) {
arr.add(o); // Correct
}
return arr;
}
Respuestas:
Esto afirma que el parámetro de tipo único
T
debe extenderseMyClass
y debe serSerializable
.Esto declara dos parámetros de tipo, uno llamado
T
(que debe extenderseMyClass
) y otro llamadoSerializable
(que se ocultajava.io.Serializable
; probablemente de esto se trataba la advertencia).fuente