gpt4 book ai didi

java - 我是否也应该将集合封装在 setter 中?

转载 作者:行者123 更新时间:2023-11-30 09:44:01 24 4
gpt4 key购买 nike

我应该更换一个简单的二传手

public void setCategories(Set<String> categories)
{
this.categories = categories;
}

像这样:

public void setCategories(Collection<String> categories)
{
this.categories.clear();
if (categories != null)
{
this.categories.addAll(categories);
}
}

因此对象的属性类别将无法通过传递的参数引用进一步修改,因为它可能是:

Set<String> categories = new TreeSet<String>();
categories.add("cityguide");
categories.add("other");
Document document = new Document("http://unique-address.com");
document.setCategories(categories);
System.out.println(categories); //outputs [cityguide, other]
System.out.println(document.getCategories()); //outputs [cityguide, other]
document.setCategories(categories);
categories.add("traveling");
System.out.println(categories); //outputs [cityguide, other, traveling]
System.out.println(document.getCategories()); //outputs [cityguide, other, traveling]

最佳答案

是的,是的,你应该

另一个选项也是在 setter 中为字段创建一个新集合,但您的解决方案更好,因为它避免了(不必要的)分配

或在循环中删除和添加每个类别

public void setCategories(Collection<String> categories)
{
for(String cat:this.category.toArray(new String[0])){//using toArray to avoid ConcurrentModificationException
removeCategory(cat);
}
if (categories != null)
{
for(String cat:categories){
addCategory(cat);
}
}
}

因此您不必复制任何用于删除和/或添加类别的触发器

关于java - 我是否也应该将集合封装在 setter 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8107076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com