这是一个bug还是我遗漏了什么?

cwtwac6a  于 2021-07-09  发布在  Java
关注(0)|答案(0)|浏览(246)

xmlencoder构造函数init状态优化非常好,除非需要它在构造函数设置的某个状态之后对实际状态集进行编码。这似乎是一个bug(或缺少的特性:-))。

import java.beans.Encoder;
import java.beans.Expression;
import java.beans.PersistenceDelegate;
import java.beans.XMLEncoder;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class XMLEncoderBug {
    private File file;

    public XMLEncoderBug() {
        //this.setFile(".");
    }

    public File getFile() {
        return this.file;
    }

    public void setFile(String fileName) {
        this.setFile(new File(fileName));
    }

    public void setFile(File file) {
        this.file = file;
    }

    public static void main(String[] args) throws IOException {
        XMLEncoderBug bean = new XMLEncoderBug();
        bean.setFile(new File("./test/test/test"));

        FileOutputStream fout = new FileOutputStream("TestBean.xml");
        XMLEncoder enc = new XMLEncoder(fout);

        enc.setPersistenceDelegate(File.class, new PersistenceDelegate() {
            protected Expression instantiate(Object oldInstance, Encoder out) {
                System.out.printf("FilePersistenceDelegate.instantiate(oldInstance=%s, out)\n", oldInstance.getClass().getName());
                File file = (File)oldInstance;
                String fileName = file.getAbsolutePath();

                return new Expression(file, file.getClass(), "new", new Object[]{ fileName });
            }
        });

        enc.writeObject(bean);
        enc.flush();
        fout.flush();
        enc.close();
        fout.close();
    }
}

所以,按原样运行代码。一切都按预期编码。然后,在构造函数中取消注解该行并再次运行它。注意bean的实际状态是如何不能正确持久化的。
现在,我理解了xmlencoder的优化,不编码由无参数构造函数设置的任何状态,因为在解码过程中,构造函数被调用,状态被初始化为构造函数所做的任何操作。
但是,当构造函数以某种方式初始化状态并随后更改时,示例的持久化状态肯定没有正确编码。
我错过什么了吗?
顺便说一句:Java1.8。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题