システムといくつかのモジュールで構成されるJava言語で Web アプリを開発しています。それらはすべてインターフェイスを実装し、IAppIdentifier
すべてのモジュール参照とシステム自体をシステムに格納しList
ています。
アイデアは、すべてのモジュールが必要なインターフェイス (IAppIdentifier から拡張された) を持っている場合にシステム自体または別のモジュールにアクセスできるように設計することです。そのため、システムに要求する必要があります。
私は動作するこのコードを持っています:
@Override
public IAppIdentifier moduleByClass(Class<? extends IAppIdentifier> clazz) {
List<IAppIdentifier> iApps = this.get_Iapps();
for (IAppIdentifier iApp : iApps) {
if (clazz.isAssignableFrom(iApp.getClass())) {
return iApp;
}
}
return null;
}
基本的に、配列の各クラスが必要なインターフェイスから割り当て可能であることを確認しており、そうであればそのインスタンスを返します。ただし、問題は、メソッドによって返されたときにキャストする必要があることです。
たとえば、システムのインスタンスを取得するには、次のようなものを実装する必要があります。
((ISystem) this.get_Service().moduleByClass(ISystem.class))
私の質問は、コンパイル時に引数として渡すのと同じ型を確実に返すために、そのキャストを再度行うことを回避する方法がJavaにあるのでしょうか?