У меня есть что-то вроде этого:
@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>
. Чтобы сохранить его в одной таблице, все значения преобразуются в строки независимо от типа 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 ...
Можно ли это сделать? И если да, то как?