我有
public class MyFactory()
{
public static <T> T getItem(Element element, Class<T> clazz)
{
T item = null;
if (clazz == IFoo.class)
{
item = (T) new Foo();
}
else if (clazz == IBar.class)
{
item = (T) new Bar();
}
...
assert item instanceof IParsable;
(IParsable(foo)).parse(element)
return item;
}
}
然后我这样称呼它
IFoo parsedFoo = MyFactory.getItem(someElement, IFoo.class);
这里具体类实现IParsable
。我是否能够删除运行时断言检查并进行编译时检查以查看是否“IParsable”并调用解析?
另外我想知道是否有办法在getItem()
方法的编译时强制执行 IFoo<-->Foo 实现关系并删除类型转换(T)
?
IFoo
编辑:我想我会给出一个大纲Foo
public interface IFoo
{
String getFooName();
int getFooId();
....
}
class Foo implements IFoo, IParsable
{
...
}
编辑2:
我只是想到了这样的重构,现在唯一不是编译时检查的是接口和实现之间的关系。
public static <U extends IParsable, T> T getItem(Element element, Class<T> clazz)
{
U item = null;
if (clazz == IFoo.class)
{
item = (U) new Foo();
}
else if (clazz == IBar.class)
{
item = (U) new Bar();
}
...
item.parse(element)
return (T) item;
}