私はこのようなインタフェースを持って後方に影響を及ぼすどのようインタフェースの変更ジェネリック医薬品は、互換性
public interface EventListener<T extends Event>
ここでの問題は、EventListener
は(もおよそEvent
を言うことができる)非常に一般名とクラスがあるということですEvent
一般的な方法で書かれていません。私たちは非下位互換性の変更計画を行うことを許可されていないので
は、より一般的であることをインターフェイスの一般的な部分を変更することでした。だから基本的に私は2つの選択肢があります。どちらか、
a)は、スーパーインターフェース(例えば。GeneralEventListener
の追加のは、今の名前を気にしないようにしましょう)差別
public interface GeneralEventListener<T>
Bせずにジェネリックを取ることができます)EventListener
はタイプTのオブジェクトを取ることを許可。
public interface EventListener<T>
最初は許可された変更だと思います。しかし、これは不要な合併症のように思え、名前空間を汚染するでしょう。これまでの情報を除いて、制限をEvent
にする必要はありません。だから、私は "(b)バイナリの下位互換性がありますか?"
これは役に立ちますか? https://stackoverflow.com/questions/43493452/can-i-recompile-a-public-api-with-a-sub-interface-and-keep-binary-compatibility/43503782#43503782 – Eugene
@Eugeneそうでもありません。これはむしろ抽象的な方法に関するものでした。私はより一般的な部分のために許可されたタイプのより大きなサブセットを許可することを探しています。なぜこれがうまくいかないのかはかなり明らかですが、インタフェースでの型指定の一般的な制限を強制する上で大きなメリットはありません。私は非常にまれなケースがあるかもしれないと思いますが、一般的にこれはコードを再利用できないようにする有害な制限のようです。 – patrik