2012-04-13 6 views
4

ich ein Problem mit Java bekam, wenn ich versuche, eine Methode zu überschreiben, wird mein Code folgt:Java-Methode überschreiben mit dem Parameter „Klasse <? Erweitert Objekt>“

public abstract class CustomAdapter{ 
    public abstract Boolean addItem(Class<? extends Object> aObject); 
} 

public class RainAdapter extends CustomAdapter { 
    @Override 
    public Boolean addItem(ClassOfRain aRainInfo) { 
     // do something 
    return true; 
    } 
} 

Kann ich die die „Klasse deklarieren "zu" ClassOfRain "? Wenn ja, wie?

Danke für Ihre Lektüre!

+1

Klasse macht keinen Sinn, da ALLE Java-Klassen das Objekt erweitern ... – MarioDS

Antwort

5

Ich denke, Sie sind ein bisschen verwirrt. Sind Sie sicher, dass Sie versuchen, um nicht zu sagen:

public abstract class CustomAdapter<T extends Object> { 
    public abstract Boolean addItem(T aObject); 
} 

public class RainAdapter extends CustomAdapter<Rain> { 
    @Override 
    public Boolean addItem(Rain aRainInfo) { 
     // do something 
     return true; 
    } 
} 

In meiner Interpretation Ihrer Klassenstruktur, Sie versuchen, eine generische addItem Methode zu machen, so um das Objekt eigentlichen Klasse vorbei ist zwecklos.

+0

danke für deine Antwort! –

0

Das ist nicht möglich. Ein Methoden-Override bedeutet, dass Sie genau den gleichen Methodenkopf einfügen. Sie können nur den Namen des angegebenen Parameters ändern.

0

Class<Rain.class> würde die Reflexion von Rain Klasse halten. Dies funktioniert jedoch nicht, da überschriebene Methoden dieselben formalen Parameter haben müssen. Sie müssen also Class<? extends Object> verwenden.

0

die Methodensignaturen müssen übereinstimmen, wenn abstrakten/Interface-Methoden der Umsetzung und/oder zu überschreiben ... Sie so etwas wie diese tho

public abstract class CustomAdapter{ 
    public abstract Boolean addItem(Object o); 
} 

public class RainAdapter extends CustomAdapter { 

    public Boolean addItem(Object o){ 
     if (o.getClassName().equals("ClassOfRain")){ 
      return this.addItem((ClassOfRain) o); 
     } 
     return false; 
    } 
    private Boolean addItem(ClassOfRain aRainInfo) { 
     // do something 
     return true; 
    } 
} 
Verwandte Themen