「モジュール」を定義するインターフェースがあります。
public interface AIMModule {
// Details not relevant
}
そして、それらのモジュールのコンテナーを定義する別のもの:
public interface AIMModuleContainer {
public void addModule( AIMModule module );
}
これらの「モジュール」は実際には GUI コンストラクトであるため、コンテナーの実装は、使用している GUI ツールキットの HLayout ウィジェットを拡張します。これには、moduleStack と呼ばれる SectionStack が含まれています。SectionStack.addSection( SectionStackSection ) はセクション スタックを GUI に追加するため、「モジュール」コンテナーの抽象化は次のようになります。
public class UserContainer extends HLayout implements AIMModuleContainer {
@Override
public void addModule( AIMModule module )
{
moduleStack.addSection( (SectionStackSection)module );
}
}
したがって、モジュールの実装は、SectionStackSection と呼ばれるウィジェットを拡張します。
public class AccountInformationModule extends SectionStackSection implements AIMModule {
// Details not relevant
}
問題は、addSection() を呼び出す addModule() でキャストすることです。AIMModuleContainer には AIMModule が含まれているため、addModule() は AIMModule を取得する必要があります。ただし、実装レベルでは、moduleStack ウィジェットが SectionStackSection を挿入するため、インターフェースの「モジュール」を実装に従ってキャストする必要があります。
これは機能しますが、気分が悪いです。誰かが私の AIMModule インターフェイスを SectionStackSection 以外のものを拡張して実装し、その AIMModule を addModule() に渡すと、そのキャストは壊れます。それは正しくないようです。
これは壊れていますか?もしそうなら、それを修正するアプローチは何ですか?