Si no usa Java Generics, creo que no es posible tener dos métodos en la misma clase que difieran solo en su tipo de devolución.¿Se puede sobrecargar el método con genéricos y solo cambiar el tipo genérico de la firma del método?
En otras palabras, esto sería ilegal:
public HappyEmotion foo(T emotion) {
// do something
}
public SadEmotion foo(T emotion) {
// do something else
}
es el mismo cierto cuando la sobrecarga de métodos que devuelven un tipo genérico que puede implementar diferentes interfaces, como si los dos métodos siguientes estaban presentes en la misma definición de clase:
public <T extends Happy> T foo(T emotion) {
// do something
}
public <T extends Sad> T foo(T emotion) {
// do something else
}
Sería esto ilegal?
¿Intentaste compilarlo? Un compilador (conforme) le dirá con prontitud qué es legal y qué es ilegal. Una mejor pregunta sería '¿por qué es ... ilegal?' si no entiendes las razones –