簡體   English   中英

為什么不能用不同的類型繼承 arguments

[英]Why cannot be inherited with different type arguments

我已經看到了很多關於這個的問題,但沒有一個看起來正是我所面臨的,我仍然不明白出了什么問題。 我有一個 class 實現了兩個接口,這兩個接口從另一個接口與 generics 擴展。 不管是誰,我都無法在同一個 class 中實現這兩個接口,因為我有一個錯誤說“不能用不同的類型參數繼承”。

與 Generics 的接口:

public interface Observer<O> {
    void onEvent(O data);
}

接口A:

public interface EventAObserver extends Observer<String> {
}

接口B:

public interface EventBObserver extends Observer<Integer> {
}

Class 需要監聽這兩個事件並得到錯誤:

public class Listener implements EventAObserver, EventBObserver {
    @Override
    public void onEvent(Integer data) {

    }

    @Override
    public void onEvent(String data) {

    }
}

所有這些麻煩,因為在我的代碼中的其他地方我有一個觀察者列表,我想廣播事件,就像:

for (Observer observer : observers)
    observer.onEvent(data);

是否有可能解決這個 inheritance 問題? 還是我應該嘗試完全不同的東西?

謝謝!

由於 generics 在運行時的類型擦除,您應該嘗試不同的方法。 這意味着在運行時 generics 的指定類型都被Object替換。 因此, Listener中的onEvent方法在運行時看起來是一樣的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM