2016-03-19 29 views
0

我的自定義類是翻新方法,但是在同一個類中,我使用Twitter,它包含一個具有相同定義的方法。如何從不同的接口實現相同的接口方法 - 翻新和Twitter

我得到警告

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

@Override 
public void failure(RetrofitError error) 

相同的警告也在這裏。

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

所以,我怎樣才能擺脫這個問題。

感謝。

回答

0

如果一個類型實現兩個接口,並且每個接口定義具有相同簽名的方法,則在效果只有一個方法,並且它們不是可區分的。如果說,這兩種方法的返回類型有衝突,那麼這將是一個編譯錯誤。這是繼承,方法重寫,隱藏和聲明的一般規則,並且也適用於不僅在2個繼承的接口方法之間,而且也在接口和超類方法之間的可能衝突,或者甚至僅適用於泛型的類型擦除造成的衝突。

您可以繼承@Override-equivalent的方法,但要遵守方法覆蓋和隱藏的常規要求。由於它們是@Override-equivalent,實際上只有一種方法可以實施,因此沒有任何區別/選擇。

編譯器不必確定哪個接口的哪個方法,因爲一旦它們被確定爲@Override-等價的,它們是相同的方法。

解決潛在的不兼容問題可能是一項棘手的任務,但這完全是另一個問題。

要解決此問題,實現接口的匿名

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

什麼是解決問題的答案。這兩個都不是我自己的方法,一個是Retrofit庫,另一個是Twitter。 –

+0

看看我的ans最後一行解決問題實現接口匿名 –

+0

VSI已經添加了如何解決問題的方式,請看我的ans –

0

認爲消息「覆蓋方法是最後的」講真話(儘管拼寫錯誤),不能覆蓋。你也不需要 - 因爲這個消息在超類中是最終的,所以它已經被實現了。

@Maheshwar已經說過,這是否給了你所需要的是一個完全不同的故事。

+0

我知道這個基本定義,我想我無法在這個問題上得到答案。謝謝。 –

+0

既然這個答案沒有解決你的問題,我建議你在兩個不同的類中實現兩個不同的接口。如果你想讓它們靠得很近,你可以考慮將其中一個類作爲另一個類的內部類。正如你所知道的,它仍然不會讓你重寫最後的方法,但它會讓你區分兩個接口中相同的方法。 –