java - 限制对实例变量的访问仅限于该类中的选定方法
问题描述
我想限制或限制对成员的更新,palidromes
并且palidromesFIFO
仅限于一种方法,例如addPalindromeWord
,并且不要让任何其他方法来更新它。有没有办法做到这一点?
目标是在处理向集合添加任何新值时实现模块化。必须遵循一些基本逻辑。我不希望看到任何其他以抽象方式直接影响集合的方法。
static class MyPalindromes{
private Set<String> palidromes;
private Deque<String> palidromesFIFO;
private int maxLenOfCache;
public MyPalindromes(int maxCachingLength) {
palidromes = new TreeSet<>(new MyComparator());
palidromesFIFO = new ArrayDeque<String>();
maxLenOfCache = maxCachingLength;
}
public void addPalindromeWord(String word) {
palidromes.add(word);
if (palidromesFIFO.size() == maxLenOfCache && !palidromesFIFO.isEmpty()) {
palidromesFIFO.removeFirst();
}
if (maxLenOfCache > 0) {
palidromesFIFO.addLast(word);
}
}
public void filterAndAddOnlyPalindromes(List<String> words) {
List<String> validWords = new ArrayList<>();
for (String w : words) {
if (isPalindrome(w)) {
validWords.add(w);
}
}
this.addPalindromeWords(validWords);
}
public void addPalindromeWords(List<String> words) {
for (String word : words) {
// palidromes.add(validWords); //<< DISALLOW this direct update to the set
this.addPalindromeWord(word); // << ONLY allow update through addPalindromeWord method
}
}
}
解决方案
您可以将您的集合“嵌套”在class
仅公开这些方法的专用(可选内部)中。然后外部类无法访问私有字段和方法,并且您Collection
可以通过其他方式进行修改。
但是,您还必须确保Collection
不返回 ,否则开发人员可以直接修改它。通过从内部类中的集合委派任何纯粹的读取操作来做到这一点。
如果你这样做'足够通用',你只需要一堆类来处理这个。在周围建立一个小型图书馆实际上是一件好事。
推荐阅读
- javascript - 通过网络在 Javascript 中发送十六进制值
- log4r - rails6 log4r tagged_logging.rb:22:in `call': 参数数量错误
- ruby-on-rails - 'SQLite3::BusyException: database is locked' 通过carrierwave上传时出现异常
- sql-server - 如何阻止 Crystal Reports 提示输入参数
- ruby-on-rails - 合并两个 json 文件并遍历它们
- python - 为什么 print(f.close()) 在下面的代码中返回 None ?
- python - 使用烧瓶和 Gunicorn 在生产中加载预训练手套
- jenkins - Github OAuth 与 Jenkins 用于组织
- compilation - 如何将 haxe 文件转换为 C# 库或源文件
- reactjs - 终端错误中的笑话调试 - 目录丢失