私はXMLファイルにいくつかのデータを入れようとしています。ここでは、コードは次のようになります。XmlEncoderがクラスのメンバーをXMLファイルに挿入しないのはなぜですか?
@Test
public void TestProximities() {
// Create a proximity
ISpaceComponent solarSystem = Init.createSolarSystemProximities();
solarSystem.runTtest();
Path filePath = Paths.get("c:\\temp\\junk.bin");
File xmlFile = new File("c:\\temp\\");
boolean success = xmlFile.mkdirs();
if (!success && ! xmlFile.exists()) {
// Directory creation failed
System.out.println("Failed to create a file: " + filePath);
}
try {
XMLEncoder fileXml = new XMLEncoder(new BufferedOutputStream(new FileOutputStream("c:\\temp\\junk.xml")));
fileXml.writeObject(solarSystem);
fileXml.flush();
fileXml.close();
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
}
Init.createSolarSystemProximities():
public static ISpaceComposite createSolarSystemProximities() {
// Proximities
ISpaceComposite solarSystem = new SpaceComposite("The Solar System");
solarSystem.addComponent(new Star("Sol"));
ISpaceComposite MercuryProximity = new SpaceComposite("Mercury proximity");
MercuryProximity.addComponent(new Planet("Mercury"));
solarSystem.addComponent(MercuryProximity);
ISpaceComposite VenusProximity = new SpaceComposite("Venus proximity");
VenusProximity.addComponent(new Planet("Venus"));
solarSystem.addComponent(VenusProximity);
ISpaceComposite EarthProximity = new SpaceComposite("Earth proximity");
EarthProximity.addComponent(new Planet("The Earth"));
EarthProximity.addComponent(new Moon("The Moon"));
solarSystem.addComponent(EarthProximity);
ISpaceComposite MarsProximity = new SpaceComposite("Mars proximity");
MarsProximity.addComponent(new Planet("Mars"));
MarsProximity.addComponent(new Moon("Phobos"));
MarsProximity.addComponent(new Moon("Deimos"));
solarSystem.addComponent(MarsProximity);
return solarSystem;
}
そして、空間複合クラスは次のように探しています:
public class SpaceComposite extends SpaceComponent implements ISpaceComposite {
public static final long serialVersionUID = Data.serialVersionUID;
private ArrayList<ISpaceComponent> _components;
private int _currentMoonIndex;
}
また 'SpaceCompositeは、' デフォルトのprameterlessのコンストラクタを持っています。しかし、ファイルに挿入されている唯一のことは、その名前であり、「SpaceComponent」クラスから
public abstract class SpaceComponent implements ISpaceComponent, Serializable{
private String _title;
public static final long serialVersionUID = Data.serialVersionUID;
// Default constructor
public SpaceComponent(){
_title = "";
}
}
どのように私はこの問題を解決することができますがderrived?
プライベートアクセス修飾子を使用しているセッターを宣言できますか?私はサードパーティのコードの私的なメンバーに完全にアクセスしたくないので、それが必要です – Eugene
@Eugene真実を伝えるために、私は 'XMLEncoder'の経験はあまりありませんが、私は間違いなくprivate外界に露出したくない私のセッターのためのパッケージの可視性。 – dasblinkenlight