全て、
うまくいけば、簡単な質問です。多数のコレクションと HashMaps を保持するクラスを実装する最良の方法を考えています。クラスは、クラス外でいつ変更されたかを知る必要があります。つまり、アイテムの追加/削除/変更です。現時点では、各コレクション/ハッシュマップをクラスのパブリック ゲッターとして公開する必要があります。
したがって、私の基本的なクラスは次のようになります...
public class MyClass {
protected final HashMap<String, String> _values = new HashMap<String, String>();
protected final ArrayList<MyOtherClass> _other = new ArrayList<MyOtherClass>();
protected final ArrayList<MyOtherClass2> _other2 = new ArrayList<MyOtherClass2>();
// ... implementation
public HashMap<String, String> getValues() {
return _values;
}
public ArrayList<MyOtherClass> getMyOtherClassList() {
return _other;
}
public ArrayList<MyOtherClass2> getMyOtherClassList2() {
return _other2;
}
public String getContent() {
// build the content based on other/other2...
StringBuilder sb = new StringBuilder();
// iterate through both collections to build content...
// ...
return sb.toString();
}
}
public getMyOtherClass {
public String name; // has getter and setter
public String value; // has getter and setter
}
public getMyOtherClass2 {
public String name; // has getter and setter
public String value; // has getter and setter
public String somethingElse; // has getter and setter
}
コンテンツの長さに基づいて _values にキー/値を追加したい
_values.add("Length", getContent().length);
したがって、長さの値は、_other および _other2 に追加される内容に基づいて動的になります。
これに関する問題は、_values と _other を public getter で公開することであり、クラス外の何かがそれらを変更できることです。クラスは、アイテムが変更されたかどうかを知りません。
私が考えることができるいくつかの解決策は、コレクション/ハッシュマップを読み取り専用にすることです-しかし、これは実行時例外をスローします-この場合、コンパイラーにそれらが読み取り専用であることを示して例外をスローさせたいのですが、私はしませんこれが可能かどうかはわかりません。
もう 1 つの方法は、コレクション/マップごとに追加/削除を追加し、それに応じて Length プロパティを更新することです。ただし、MyOtherClass で値が変更された場合でも、MyClass はそれを認識しません。
または、独自の Hashmap/List/Collection を作成して、アイテムがいつ追加/削除されたかを判断し、getMyOtherClass、getMyOtherClass2 にプロパティ変更リスナーを設定することもできます。
これに対する良い解決策はありますか?
ありがとう、
アンデス