Как XMLEncoder знает, что свойство было установлено в конструкторе объекта и, следовательно, не выводить его?XMLEncoder writeObject пропускает свойства, инициализированные в конструкторе
Вот простой пример (работает на Java 1.8), который демонстрирует это: Сначала определим простой объект с добытчиками и сеттеров и конструктор по умолчанию:
public class Simple {
int m;
int n;
public int getM() { return m;}
public void setM(int m) {this.m = m;}
public int getN() {return n;}
public void setN(int n) {this.n = n; }
public String toString() {
return "m=" + m + ",n=" + n;
}
public Simple() {
this.m = 1;
this.n = 2;
}
}
В настоящее время основной, который инициализирует объект, использует установщик по одному из свойств и вызывает XMLEncoder для конечного объекта. Чтобы быть уверенным, я также распечатать свойства объекта перед вызовом кодировщик:
public class Main {
public static void main(String[] args) {
Simple simple = new Simple();
simple.setN(7);
System.out.println(simple.toString());
XMLEncoder encoder=null;
try{
encoder=new XMLEncoder(new BufferedOutputStream(
new FileOutputStream("simple.xml")));
}catch(FileNotFoundException fileNotFound){
System.out.println("ERROR: While Creating the File ");
}
encoder.writeObject(simple);
encoder.close();
}
}
Запуск программы, я получаю ожидаемый результат: т = 1, п = 7 Однако, когда я смотрю на созданный файл, Я получаю:
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_112" class="java.beans.XMLDecoder">
<object class="simple.Simple">
<void property="n">
<int>7</int>
</void>
</object>
</java>
Здесь мы видим, что только одно свойства выводится XMLEncoder, в то время как предыдущая распечатке объекта показывает, что оба свойства установило их значение. Как будто XMLEncoder имеет хрустальный шар и знает, что произошло в прошлом!
это выглядит наоборот, как будто он имеет амнезию, он может иметь выход как п и м но это напечатать только одно свойство –