2017-11-18 5 views
0

私はプライベートフィールドとパブリックメソッドを持つクラスを持っています。私のメソッドはget/set命名規則に従います。フィールドが非公開で、オブジェクトデータをXMLファイルに書き込もうとすると、空のXMLファイルが作成されますが、publicに変更するとXMLにはすべての必要なデータが含まれます。あなたはこれを引き起こしていると思いますか?クラスフィールドがプライベートな場合、XMLEncoderはオブジェクトデータを書きません

public class ClassData { 

private String name; 
private ArrayList<String> methods; 

public ClassData() 
{ 
    methods = new ArrayList<>(); 
} 

public void setName(String cName) 
{ 
    name = cName; 
} 

public String getName() 
{ 
    return name; 
} 

public void setMethods(String mName) 
{ 
    methods.add(mName);  
} 

public ArrayList<String> getMethods() 
{ 
    return methods; 
} 

} 

String fileName = cObj.getName() + ".xml"; 

XMLEncoder enc=null; 

try{ 
    enc=new XMLEncoder(new BufferedOutputStream(new FileOutputStream(fileName))); 
}catch(FileNotFoundException fileNotFound){ 
    System.out.println("Unable to save file."); 
} 

enc.writeObject(cObj); 
enc.close(); 
+0

XMLEncoderについて教えてください。 – f1sh

+0

@ f1sh更新されたXMLコードの投稿。私はjava.beans.XMLEncoderを使用しています – Brosef

答えて

0

あなたの方法がそれにアクセス可能「プロパティ」を作るために"Setter"を持っていないからです。メソッドsetMethods(String mName)addMethod(String mName)に変更してメソッドを追加し、メソッドと同じ時間を設定するセッターsetMethodsを追加します。以下のサンプル:

import java.beans.XMLEncoder; 
import java.io.BufferedOutputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.util.ArrayList; 

public class ClassData { 

    private String name; 
    private ArrayList<String> methods; 

    public ClassData() { 
     methods = new ArrayList<>(); 
    } 

    public void setName(String cName) { 
     name = cName; 
    } 

    public String getName() { 
     return name; 
    } 

    public void addMethod(String mName) { 
     methods.add(mName); 
    } 
    public void setMethods(ArrayList<String> m) 
    { 
     methods.addAll(m); 
    } 

    public ArrayList<String> getMethods() { 
     return methods; 
    } 

    public static void main(String[] args) { 
     ClassData cObj = new ClassData(); 
     cObj.setName("This_is_name"); 
     cObj.addMethod("m1"); 
     String fileName = cObj.getName() + ".xml"; 

     XMLEncoder enc = null; 

     try { 
      enc = new XMLEncoder(new BufferedOutputStream(new FileOutputStream(fileName))); 
     } catch (FileNotFoundException fileNotFound) { 
      System.out.println("Unable to save file."); 
     } 

     enc.writeObject(cObj); 
     enc.close(); 

    } 

} 
+0

あなたは何を言っているのですが、なぜ 'public void setMethods(String mName)'が適切な設定者ではないのですか?したがって、あなたのメソッド 'public void setMethods(ArrayList m)'は決して呼び出されませんか? – Brosef

+0

@Brosef Beanのセッターメソッドではありません。さもなければ、プロパティを更新することができるメソッド名 'sayHello(String m)'を持つことさえできます。しかし、メソッドをプロパティにするわけではありません。詳細は、Java [bean spec](http://www.oracle.com/technetwork/articles/javaee/spec-136004.html)を参照してください...セクション8.3.1:デフォルトでは、 'public get ();' 'public void set a)'フォームのメソッドを探してプロパティを探します。 – Optional

関連する問題