繁体   English   中英

从类名创建类实例

[英]Create class instance from class name

我有这样的事情:

@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类中。

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

像下面的代码片段一样:

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 instanceof String)result =(String)eval; ...您需要将每种类型的变量都转换为

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

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

您仍然将attribs放在单独的表格中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM