我有许多引用许多持久化类的html表单。通过泛型参数实例化类 - 哪种方法更好
所有HTML形式是通过一个单一的类HtmlForm控件生成通过使在相应HTMLFields实例:
public class HTMLForm<T>{
HTMLForm(HTMLFields[] f, Class<T> classt){
this.stupidSunWontAllowTnewInstance = classt;
// ... whatever GWT jazz ....
}
public T getPersistenceHandlerClass(){
try{
return (T) stupidSunWontAllowTnewInstance.newInstance();
}
catch (InstantiationException e){}
catch (IllegalAccessException e){}
}
Class<T> stupidSunWontAllowTnewInstance;
}
HtmlForm控件着眼于HTMLFields []数组产生相应的HTML形式。因此,每一组HTMLFields []数组都需要不同的持久性类。持久化类是像
PostalAddr, PersonInfo, ItemDescr, Preferences, etc, etc.
现在,因为我不能做T.newInstance(),stupidSunWontAllowTnewInstance将被分配(一个愚蠢的必要性,由于仿制药的太阳的体系结构)由HtmlForm控件构造函数,然后getPersistenceHandlerClass是稍后用于获取适当的持久性处理类。
由于云计算由CPU时间收费,我的问题是,这将使用较少的CPU,假设我有大约25个持久类来趟。上面的第一个或后面的一个?
public T getPersistenceHandlerClass(){
if (stupidSunWontAllowTnewInstance == PostalAddress.class)
return new PostalAddress();
if (stupidSunWontAllowTnewInstance == PersonInfo.class)
return new PersonInfo();
if (stupidSunWontAllowTnewInstance == ....
....
....
if (stupidSunWontAllowTnewInstance == etc.class)
return new etc();
}
或地图工厂
public static Map<PersistenceHandlerFactoryInterface> PHFactories;
public T getPersistenceHandlerClass(){
return
PHFactories.get(stupidSunWontAllowTnewInstance).createInstance();
}
或做一个更好的建议(与CPU消耗的考虑),我应该如何克服Java泛型的缺点,另一种方式从参数T实例化的(或者批评我为什么太太太批评太阳的一般参数缺点)。
批评java泛型是当今常见的一种运动,所以不要期望对其进行批评:) – Bozho 2009-12-11 08:19:50
对Java泛型的批评很好,但我建议你最好用更体贴和更少挑衅的方式来做。 – 2009-12-11 08:30:47
顺便说一句,我正在使用vaadin。 – 2009-12-11 08:45:52