全部,
希望是一个简单的问题。我正在考虑实现一个包含许多集合和 HashMap 的类的最佳方法,在这些集合和 HashMap 中,类需要知道它们何时在类之外被修改- 即添加/删除/更改的项目。目前,每个集合/哈希图都需要在我的班级中公开为公共 getter。
所以我的基本课程如下所示......
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 的内容。
这样做的问题是使用公共 getter 公开 _values 和 _other 是类之外的任何东西都可以修改它们。该类将不知道项目是否已被修改。
我能想到的几个解决方案是使集合/哈希图只读-但这会引发运行时异常-如果是这种情况,我希望编译器指示它们是只读的并抛出异常,但我不不知道这是否可能。
另一种方法是为每个集合/映射添加添加/删除并相应地更新 Length 属性 - 但同样,如果 MyOtherClass 中的值发生变化,MyClass 仍然不会知道它。
或者编写我自己的 Hashmap/List/Collection 以确定何时添加/删除项目,并且可能在 getMyOtherClass 上具有属性更改侦听器 getMyOtherClass2。
有什么好的解决方案吗?
谢谢,
安德斯