Ao ler o tutorial oficial Java sobre genéricos, descobri que você pode restringir o argumento de tipo (neste caso é T
) para estender uma classe e / ou mais interfaces com o operador 'e' ( &
) como este:
<T extends MyClass & Serializable>
Substituí o &
por ,
(por engano e ainda funciona, com um pequeno aviso).
Minha pergunta é, há alguma diferença entre esses dois:
<T extends MyClass & Serializable>
<T extends MyClass , Serializable> // here is with comma
E o método de exemplo:
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;
}
Respostas:
Isso afirma que o parâmetro de tipo único deve ser
T
estendidoMyClass
e deve serSerializable
.este declara dois parâmetros de tipo, um chamado
T
(que deve ser estendidoMyClass
) e um chamadoSerializable
(que ocultajava.io.Serializable
- provavelmente é sobre isso que o aviso se refere).fonte