2016-03-19 5 views
0

Meine benutzerdefinierte Klasse ist von Retrofit Methode, aber in der gleichen Klasse verwende ich Twitter, die eine Methode mit der gleichen Definition enthält.So implementieren Sie die gleiche Interface-Methode von verschiedenen Schnittstellen - Retrofit und Twitter

Ich erhalte auch hier

'failure(RetrofitError error)' cannot overriden 'failure(RetrofitError error)' in 'com.twitter.sdk.android.Callback' overriden method is final 

@Override 
public void failure(RetrofitError error) 

Gleiche Warnung Warnung.

App.getRestClient().getWeatherService().getWeather("s", new Callback<ApiResponse>() 
      { 
       @Override 
       public void success(ApiResponse apiResponse, Response response) 

enter image description here enter image description here enter image description here

Also, wie kann ich dieses Problem loszuwerden.

Danke.

Antwort

0

Wenn ein Typ implementiert zwei Schnittstellen, und jede Schnittstelle definieren, eine Methode, die identische Signatur, dann in Wirkung ist nur ein Verfahren, und sie sind nicht unterscheidbar. Wenn beispielsweise die beiden Methoden widersprüchliche Rückgabetypen aufweisen, handelt es sich um einen Kompilierungsfehler. Dies ist die allgemeine Regel für Vererbung, Überschreiben von Methoden, Verbergen und Deklarationen und gilt auch für mögliche Konflikte nicht nur zwischen zwei geerbten Schnittstellenmethoden, sondern auch einer Schnittstelle und einer Superklassenmethode oder auch nur Konflikten aufgrund der Typlöschung von Generika .

Sie können Methoden erben, die @Override-equivalent sind, vorbehaltlich der üblichen Anforderungen für das Überschreiben und Verbergen von Methoden. Da sie @Override-equivalent sind, gibt es effektiv nur eine Methode zu implementieren, und somit gibt es nichts zu unterscheiden/auszuwählen.

Der Compiler muss nicht identifizieren, welche Methode für welche Schnittstelle gilt, denn sobald festgestellt wird, dass sie @Override -Äquivalent sind, sind sie die gleiche Methode.

Die Lösung potentieller Inkompatibilitäten mag eine knifflige Aufgabe sein, aber das ist ein anderes Problem.

Um das Problem zu implementieren, um die Schnittstelle anonyme

public class YourClass implements RetroFitIntterface{ 

TwitterInterface myInterface = new TwitterInterface(){ 

/* Overrided method from interface */ 
@override 
public void method1(){ 

} 

}; 

/* Overrided method from superclass*/ 
@override 
public void method1(){ 

} 

} 
+0

Was ist die Antwort zu lösen. Beide sind nicht meine eigenen Methoden, eine von Retrofit-Bibliothek, während andere von Twitter. –

+0

Schauen Sie in meine ans letzte Zeile Um das Problem zu lösen implementieren Sie die Schnittstelle anonym –

+0

VSI haben den Weg hinzugefügt, wie das Problem zu beheben, bitte in meinem ans –

0

die Überzeugung, dass die Meldung „überschriebene Methode ist endgültig“ erzählt die Wahrheit (trotz der Rechtschreibfehler) zu beheben, können Sie nicht außer Kraft setzen. Noch müssen Sie - da die Nachricht in einer Oberklasse endgültig ist, ist es bereits implementiert.

Ob dies Ihnen gibt, was Sie brauchen, ist eine ganz andere Geschichte, wie @Maheshwar bereits sagte.

+0

Ich kenne diese grundlegende Definition, nun, ich denke, ich kann keine Antwort auf Stapel für diese Frage bekommen. Vielen Dank. –

+0

Da diese Antwort Ihr Problem nicht gelöst hat, schlage ich vor, dass Sie die zwei verschiedenen Schnittstellen in zwei verschiedenen Klassen implementieren. Wenn Sie sie eng beieinander halten möchten, können Sie eine der Klassen als eine innere Klasse in der anderen betrachten.Wie Sie wissen, lässt es Sie immer noch nicht eine endgültige Methode überschreiben, aber es ermöglicht Ihnen, zwischen den identischen Methoden in den beiden Schnittstellen zu unterscheiden. –

Verwandte Themen