Methoden überschreiben mit generischen Parametern

sisela

Erfahrenes Mitglied
Hallo Leute,

wie kann ich denn zwei gleichnamige Methoden in einer Klasse verwenden, wenn diese sich nur von generischen Parametern unterscheiden. Sind ja ansich zwei verschiedene Typen aber der Compiler sagt halt duplicate method.

Beispiel:
Code:
void delete(Set<Project> projects);
void delete(Set<String> projectIds);

Wäre euch mit dank verpflichtet.
 
Moin!
Das funktioniert meines Wissens nicht, da es mir ja auch erlaubt ist, die Methode delete mit einem unparametrisierten Set aufzurufen. Da kann der Compiler dann natürlich nicht mehr entscheiden, welche deiner delete Methoden er nun aufrufen sollte..

*grüssle*
MeinerEiner
 
Hallo,

nur mal so zur Korrektur, das was du meinst nennt sich überladen. Methode überschreiben ist, wenn z. b. eine Kindklasse eine Methode schreibt mit der gleichen Methoden-Signatur, wie sie in der Vater-Klasse vorhanden ist.

MFG

zEriX
 
Was würde erst der Compiler dazu sagen, wenn Du auf die Idee kommen würdest, in der Vaterklasse eine delete-Methode mit Parameter Set<Project> und in dessen Kindklasse die überschriebene Methode mit Parameter Set<String> zu versehen...
:suspekt:
 
Was würde erst der Compiler dazu sagen, wenn Du auf die Idee kommen würdest, in der Vaterklasse eine delete-Methode mit Parameter Set<Project> und in dessen Kindklasse die überschriebene Methode mit Parameter Set<String> zu versehen...
:suspekt:

Um eine Überschreibung zu verhindern kann man die Methode der Vaterklasse final deklarieren.
 
Hallo,

was seit java 5 geht ist den ReturnType einer überschriebenen Methode zu spezialisieren... das nennt sich dann Covariant Return types...
Java:
/**
 * 
 */
package de.tutorials;

/**
 * @author Thomas.Darimont
 *
 */
public class ACovariantReturnTypeExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Foo foo = new Bar();
        System.out.println(foo.perform());
    }
    
    static abstract class Foo{
        abstract X perform();
    }
    
    static class Bar extends Foo{
        Y perform() {
            return new Y();
        }
    }
    
    static class X{
    }
    
    static class Y extends X{
    }
}

Hier wurde der Returntype von X in perform() in Foo auf Y in perform() Bar spezialisiert. Unter Java 1.4 ging das nicht.

Gruß Tom
 
Zurück