Se non si utilizza Java Generics, credo che non sia possibile avere due metodi nella stessa classe che differiscono solo nel loro tipo di ritorno.È possibile eseguire un overloading dei metodi con generici e modificare solo il tipo generico della firma del metodo?
In altre parole, questo sarebbe illegale:
public HappyEmotion foo(T emotion) {
// do something
}
public SadEmotion foo(T emotion) {
// do something else
}
È lo stesso vale quando sovraccaricare metodi che restituiscono un tipo generico che può implementare diverse interfacce, come se i seguenti due metodi erano presenti in la stessa definizione di classe:
public <T extends Happy> T foo(T emotion) {
// do something
}
public <T extends Sad> T foo(T emotion) {
// do something else
}
questo sarebbe illegale?
Hai provato a compilarlo? Un compilatore (conforme) ti dirà prontamente cosa è legale e cosa è illegale. Una domanda migliore sarebbe "perché è ... illegale?" se non capisci le ragioni. –