我正在用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 中有什么方法可以避免再次进行这种转换,ergo,以确保它返回与我在编译时作为参数传递的相同类型?