Zdravim,
mam jednoduchy objekt obsahujici String a enum. Objekt se pokousim ulozit a znovu vytvorit.
Pokud ukladam pomoci ObjectOutputStream, probehne vse ok. Pokud vsak pouziji XMLEncoder, pri zapisu objektu se vypisi chyby:
java.lang.InstantiationException: SEnum
java.lang.RuntimeException: failed to evaluate: <unbound>=Class.new();
a objekt se zapise bez enumu.
public enum SEnum{
Zero, One, Two;
}
public class S implements Serializable{
public S () {}
private String name;
private SeriEnum e;
public String getName(){
return name;
}
public void setName(String val){
name=val;
}
public SeriEnum getE() {
return e;
}
public void setE(SeriEnum Ty) {
this.e = Ty;
}
}
public static void main(String[] args) {
S so=new S();
so.setName("beruska");
so.setE(SEnum.Two);
String fileName="zk.xml";
//zapis
FileOutputStream os=new FileOutputStream(fileName);
BufferedOutputStream bos=new BufferedOutputStream(os);
XMLEncoder en=new XMLEncoder(bos);
en.writeObject(so);
en.flush();
en.close();
//obnoveni
FileInputStream fis=new FileInputStream(fileName);
BufferedInputStream bis=new BufferedInputStream(is);
XMLDecoder de=new XMLDecoder(bis);
Object do=de.readObject();
de.close();
}
Nevim, jestli JavaBean nemuze z principu mit vlastnost typu enum (resp. enum neni JavaBean), jestli (a jak?) pro tvorbu enumu pouzit (Class Enum<...>). Dokazal jsem problem pouze obejit tim, ze jsem v tride S vytvoril jeste jednu String promennou, ktera obsahuje enum jako retezec a v jejim setru se mj. enum vytvari:
private String es;
public String getE(){
return es;
}
public void setE(String val){
e=SEnum.valueOf(val);
es=val;
}
Je to sice fungujici, ale nevedel by nekdo, jak ukladat enum primo?
Dekuji
Kamil Horný