根据类名创建类实例



我有这样的东西:

@Entity
public class CallCardAttribute implements Serializable, IEntity {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private String type;;
@Column(nullable = false)
@ManyToOne(optional = false)
private Validator validator;
public CallCardAttribute() {}
...

此类表示CallCard的单个属性。由于它们可能有很多,并且任何一个的数量都可能不同,因此我将属性存储为Map<Attribute, String>。为了将其保存在一个表中,所有值都转换为String,而与应用程序本身的Java类型无关。

但是当从数据库加载它们时,我需要将它们强制转换为正确的类型。因此,我将其作为type参数存储在Attribute类中,作为类名字符串。

我已经发现,我可以使用反射来获取由字符串指定的类的实例,然后用值填充它。

就像这个片段:

Integer i = 17;
String iVal = i.toString();
String iType = i.getClass().getName();
Object reVal = Class.forName(iType).newInstance();

但我需要将reVal强制转换为正确的类型,可以是String/Calendar/Integer/Double。。。

这能做到吗?如果是,怎么做?

使用instanceof来确定要强制转换到的对象:if(reVal-instanceofString)result=(String)eval;。。。您需要将每种类型的单独变量强制转换为

如果您不想在属性集合上使用@OneToMany,可以使用JPA 2.0 ElementCollection。

http://en.wikibooks.org/wiki/Java_Persistence/ElementCollection

你仍然会在一个单独的表中得到attribs。

相关内容

  • 没有找到相关文章

最新更新