2016-03-23 4 views
-1

YAMLファイルにハッシュマップを保存して読み込む際に問題があります。問題は、私のハッシュマップにクラスが含まれていることです。ここで クラスを含むHashmapを保存するにはどうすればよいですか?

public static Hashmap<String, Clans> playersClan = new Hashmap<>(); 

は私が解決する助けを必要と

public void onEnable() { 

    for(String key : this.getConfig().getKeys(true)) { 
     //Getting a red line while trying to convert the string to a clans object! 
     Clans value = new Clans(this.getConfig().getString(key)); 
     Clans.playersClan.put(key, value); 

    } 
} 

public void onDisable() { 

    for(Entry<String, Clans> entry : Clans.playersClan.entrySet()){ 

     this.getConfig().set(entry.getKey(), entry.getValue().toString()); 

    } 
    saveConfig(); 
} 

エラーを保存してyamlfileにロードする私の試みです::だからここ

は私のハッシュマップです

  1. 15行目:toString()メソッドを使用してクラスクラスのオブジェクトを変換しようとしています。 adyはtoString()メソッドでは<とすることはできないと言ってくれました。

  2. 5行目、私はクラスオブジェクトに文字列を変換しようとしていますが。もちろん、オブジェクトの文字列への変換が間違っている場合、これも間違っています。それ以外は、私も赤い線を得ています。

基本的には、文字列をクラスのオブジェクトに、クラスのオブジェクトを文字列に変換するのに役立つ必要があります。

私はbukkit APIを使用しています。

+0

シリアライゼーション(例:http://www.tutorialspoint.com/java/java_serialization.htm)をご覧ください。 – Philipp

+0

はい、私は持っていますが、クラスであるオブジェクトではできませんでした –

+0

"オブジェクトはクラス"とはどういう意味ですか? Javaの 'Class'(https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html)は' Serializable'なので、これをJavaのすべての 'Object'で実行できますあなたがそれをそのように実装すれば(つまり、オブジェクトを直列化できるようにクラスを書く)なら、それは 'Serializable'です。 – Philipp

答えて

0

はもちろん、あなたは、文字列表現に自分で変換することにより、YAMLのようにクラスのインスタンスを保存することができますが、それはあなたのYAMLライブラリを使用していないでしょう。

あなたのライブラリを使ってハッシュマップをダンプし、Clansインスタンスを「手動で」ダンプすることに切り替えるのは、管理が非常に難しくなります。どのくらいあなたの文字列をインデントするか、複雑な属性などを使ってデータ内の再帰参照を扱う方法などです。正しいアプローチではありません。

インスタンスにはのタグ付きYAMLマッピングが書き込まれている必要があります。このタグは、をロードしてをロードしてClansタイプのインスタンスを再作成し、このインスタンスの状態を属性から取り込むと、YAMLライブラリを指示します。アンカーと参照を使用してYAMLでサポートされる可能性のある再帰のため、これは通常2段階のプロセスで行われます。

すべての場合、YAMLはそれらをダンプする方法を知る必要があります。 YAMLプリミティブスカラー(整数、文字列、ブール値など)に直接マップするものもあれば、データ構造(シーケンスとマッピング)に直接マップするものもあります。あなたのライブラリは何もすることなく、HashmapをYAMLマッピングに直接マッピングできます(これはあなたのライブラリデザイナーの決定です)。 についてあなたダンプ(および負荷)する方法を伝える必要があるかもしれません他のすべてのオブジェクトのオブジェクトクラスのインスタンスマッピングが、その場合にはあなたが決して連載 YAMLスカラー文字列に自分で、あなたはライブラリを伝えるために必要がある場合がありますどのように特定の属性(例えば、IPv4アドレスを表す4バイトの値)が文字列にマッピングされるか。

など。 snakeyamlYamlBeansの例では、特定のクラスのインスタンスをダンプする方法を説明する必要はありません。

ので、それは多くの場合、それがどのように行われるか、いくつかの特別なをサブクラス化することによって行われている場合は、使用しているYAMLライブラリに依存します。

オブジェクトを文字列や文字列に変換する助けが必要なのは、独自のYAMLライブラリを作成するときだけです。経験から私はそうする前に二度思考することを推奨することができます。

関連する問題