Jens Holzkämper: Interface als Parameter einer abstrakten Methode

Beitrag lesen

Tach,

Aber es handelt sich doch nur um einen Parameter. Sprich weder die Klasse noch der Rueckgabeparameter soll generisch sein.

die Signatur einer Überschriebenen Methode muß der entsprechen, die du überschreiben willst, die Methode "MyGateway getGateway( MyResult result )" kann ja gar nicht alles, was die Methode "IGateway getGateway( IResult result )" verspricht. Letztere kann alle Objekte die IResult implementieren als Parameter verarbeiten, erstere nur spezielle, dass die Funktion etwas spezielleres zurückgibt ist dabei nicht weiter wild, sie tut damit ja mehr, als sie versprochen hat (der Umkehrschluß wirkt hier nicht, man kann also nicht mit einem Object als Parameter in die andere Richtung verallgemeinern).

Und so was wie
abstract void DoSth( <Object implements IResult> result )
ist ja nicht machbar.

Du möchtest Generics benutzen:

  
abstract class AbsProvider<T extends IResult> {  
	  public abstract IGateway getGateway( T result );  
	}  
}  
  
class MyProvider extends AbsProvider<MyResult> {  
	@Override  
	  public MyGateway getGateway( MyResult result ) {  
		return null;  
	  }  
}  
  

mfg
Woodfighter