私は次のような状況があります、私はBまたはCを実装するクラスを使用することができます。しかし、私が使用するコード、「a.doSomethingCoolを()」の部分がある私のアプリケーションでインターフェイスが実装されないようにすることはできますか?
public interface A {
void doSomethingCool();
}
public interface B extends A {
void doSomethingVeryBCool();
}
public interface C extends A {
void doSomethingVeryCCool();
}
を理由どの実装が使用されているのかわかりません(気にしません)。
BとCの実装のみが存在することを強制できますか? または、インターフェイスAが実装されないようにしますか?そのパッケージ外のクラスがインターフェイスを見ることができない
interface A {...} //no public
この方法:あなたが直接インタフェース実装されていないを強制することはできません
私はあなたができるとは思わない。私はあなたがしたいとは思わない。アスペクトを使用して実行時に巧妙なことをすることができるかもしれませんが、私があなたのライブラリのクライアントであった場合、自分の選択を制限することに満足できません。あなたができることはドキュメントです。 – duffymo
いいえあなたはできません... –
もしあなたが同様のものを入手したいと思ったら。 Aを抽象クラスにして、 "A"から直接拡張するという悲惨な結果を示すExceptionを投げることができます。人々はそうでなければ単に例外をキャッチし、あなたの警告を無視するので、彼らは怖いです。それ以外は、デザインを変更することを検討してください。 – Edd