2016-11-07 4 views
2

Ich versuche, die folgendes zu tun:Implementierung einer generischen Klasse als Schnittstelle definiert

public abstract class BaseActivity<S extends BaseDrawer> extends AppCompatActivity implements S{ 
... 
} 

wo BaseDrawer wie folgt definiert ist:

public interface BaseDrawer { 
    boolean showWait(); 
    boolean hideWait(); 
} 

Aber gibt mir die Fehlermeldung „Schnittstelle erwartet hier“ bei "implementiert S". Wenn S eine Schnittstelle erweitert, bedeutet Mittel S auch eine Schnittstelle, es gibt also keinen Grund für diesen Fehler. Habe ich recht?

+0

Sie können nicht von einem generischen Typ implementieren – Rogue

+0

Was ist exaclty das Ziel, das Sie mit einem generischen als Schnittstelle erreichen möchten? Ist nicht klar –

Antwort

1

Sie sind nicht richtig.
Es gibt einen Grund für diesen Fehler. S möglicherweise keine Schnittstelle, aber möglicherweise eine Klasse, die bereits die Schnittstelle implementiert.
Auch wenn wir davon ausgehen, dass S eine Schnittstelle ist, wer weiß dann, welche Methoden zu dieser Schnittstelle mit Ausnahme der in BaseDrawer definierten hinzugefügt wurden? Wer weiß, welche Methoden eine Kindklasse von BaseActivity implementieren muss, wenn sie nicht abstrakt ist?

0

Die Erweiterung in generischer Definition unterscheidet sich von der Typhierarchie. In der Typhierarchie kann extends nur in der Klasse extends class oder der Schnittstelle extends interface verwendet werden, aber in der generischen Definition können die extends verwendet werden, um eine Klasse oder eine Schnittstelle zu referenzieren, so dass S beides sein kann.

Und Sie können nicht generischen Typ in der Klassendefinition verwenden.

Verwandte Themen