私はいくつかのクラスがある場合:私はそれに対してコードを構築しているバイナリや他の人としてこれをコンパイルしている場合は戻り値の型を厳密なサブタイプに変更し、バイナリ互換性を保持できますか?
import java.util.Date;
public final class Foo {
private Date date;
public Date getDate(){ return date; }
}
、私はその後、バイナリ互換性を壊すことなく、これを行うことができますか?
import java.sql.Date;
public final class Foo {
private Date date;
public Date getDate(){ return date; }
}
java.sql.Date
がjava.util.Date
のサブクラスであることに注意してください。
つまり、誰かが前に私のライブラリに対してjava.util.Date
を返すようにgetDate
メソッドをオーバーライドFoo
のサブクラスをコンパイルしている可能性が(その後、私はソース互換性が壊れているだろう、私はクラスの決勝を宣言していなかった、と私には明白と思われます。そのコードはもはや私の最新バージョンに対してをコンパイルすることはありません。しかし、ソースの互換性を壊すことは、バイナリ互換性も壊れていることを意味しますかjava.sql.Date
がjava.util.Date
ことどんな行動を破るないと仮定 -
[互換性チェッカーツール](https://lvc.github.io/japi-compliance-checker/)を実行して、実行するかどうかを確認できます。 –
どのようなバイナリ互換性がありますか?コンパイルされたもの、置き換えられるものは何ですか?どのようにロードするのですか? –