Können Sie die Methode überladen mit Generika und ändern Sie nur den generischen Typ der Signatur der Methode?

Wenn Sie nicht die Verwendung von Java Generics, ich glaube, es ist nicht möglich, dass zwei Methoden in der gleichen Klasse, die unterscheiden sich nur in Ihren Rückgabetyp.

In anderen Worten, dies wäre illegale:

public HappyEmotion foo(T emotion) {
    //do something
}   

public SadEmotion foo(T emotion) {
    //do something else
}   

Ist dasselbe gilt, wenn dem überladen von Methoden, die einen generischen Typ, kann die Implementierung der verschiedenen Schnittstellen, wie zum Beispiel, wenn Sie die folgenden beiden Methoden in der gleichen Klasse definition:

public <T extends Happy> T foo(T emotion) {
    //do something
}   

public <T extends Sad> T foo(T emotion) {
    //do something else
}   

Wäre das illegal?

  • Haben Sie versucht, um es zu kompilieren? Eine (konforme) compiler werden Ihnen umgehend sagen, was legal ist und was illegal ist. Eine bessere Frage wäre "warum ist ... illegal? "" wenn Sie nicht verstehen, die Gründe.
Schreibe einen Kommentar