同一方法的不同返回类型
我需要实现newInstance方法以使此代码正常工作:
protected IDatabase createDatabase() throws Exception{
return newInstance(CLASS_NAME_DATABASE);
}
protected IDataLoader createDataLoader() throws Exception{
return newInstance(CLASS_NAME_DATA_LOADER);
}
我不允许接触这段代码,但当我尝试将newInstance作为对象实现时,这意味着我需要在您上面的代码中强制转换newInstance。有没有一种方法可以让我在不更改代码的情况下实现newInstance
谢谢
# 1 楼答案
如果
newInstance
的参数是一个Class
对象,或者其他带有泛型类型参数的对象,则可以执行以下操作,这将避免强制转换返回值,并且是类型安全的:(注意:^{} 是反射API方法,与定义的方法不同,尽管名称相同。)
但是,无论
newInstance
采用何种类型的参数,都可以使用泛型:这有点脏,因为它完全消除了对返回值类型的编译时错误检查。编译器将允许
IDataLoader x = newInstance(CLASS_NAME_DATA_LOADER);
,但同样乐意允许int x = newInstance(CLASS_NAME_DATA_LOADER);
(这实际上将它强制转换为一个Integer
,然后取消绑定)但是,在编译时也不会检查手动强制转换
Object
返回值,因此在这里使用泛型可能仍然是一种改进,因为它减少了必须编写每个类型的次数