[英]How to instantiate (inside a method) different classes that implement the same interface?
[英]How to implement same Interface method from different Interfaces - Retrofit and Twitter
我的自定義類是 Retrofit 的覆蓋方法,但是在同一個類中,我使用 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)
那么,我怎樣才能擺脫這個問題。
謝謝。
如果一個類型實現了兩個接口,並且每個接口定義了一個具有相同簽名的方法,那么實際上只有一個方法,它們是不可區分的。 例如,如果這兩個方法具有沖突的返回類型,那么它將是一個編譯錯誤。 這是繼承、方法覆蓋、隱藏和聲明的一般規則,也適用於不僅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(){
}
}
相信“覆蓋的方法是最終的”消息說的是真的(盡管有拼寫錯誤),你不能覆蓋。 你也不必——因為消息在超類中是最終的,它已經實現了。
正如@Maheshwar 已經說過的那樣,這是否能滿足您的需求是一個完全不同的故事。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.