【发布时间】:2013-04-01 14:58:10
【问题描述】:
我有
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”并调用解析?
我还想知道是否有办法强制 IFooFoo 在编译时在 getItem() 方法中实现关系并删除类型转换 (T) ?
编辑:我想我会为IFoo 和Foo 提供一个大纲
public interface IFoo
{
String getFooName();
int getFooId();
....
}
class Foo implements IFoo, IParsable
{
...
}
EDIT2:
我只是想到了这样的重构,现在唯一不是编译时检查的是接口和实现之间的关系。
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;
}
【问题讨论】:
标签: java factory-pattern generic-constraints