6 java arraylist getter-setter
我如何在Java中使用getList和setter作为ArrayList?这就是我所拥有的.我认为我正在使用getter,但我不知道如何使用setList作为ArrayList.
private ArrayList<String> stringlist = new ArrayList<String>();
public ArrayList<String> getStringList() {
return stringlist;
}
public ArrayList<String> setStringList() {
// I don't know what to put here
// I also don't know if my return value is correct
}
Run Code Online (Sandbox Code Playgroud)
Dan*_*den 43
ArrayList但是,它是一个可变容器类,所以你根本不需要一个setter:只需让调用者调用getStringList()然后改变ArrayList自己:
public final class DataHolder {
private final ArrayList<String> stringList = new ArrayList<>();
public ArrayList<String> getStringList() {
return stringList;
}
}
public static void main(String[] args) {
DataHolder data = new DataHolder();
data.getStringList().add("foo");
}
Run Code Online (Sandbox Code Playgroud)
另一方面,更常见的要求是防止调用者能够改变内部数据结构,以便您的类实际上可以对其数据实施其不变量.ArrayList总是可变的,所以如果你需要返回一个,ArrayList但你不想修改你的私有状态,你需要复制:
public ArrayList<String> getStringList() {
return new ArrayList<String>(stringList);
}
Run Code Online (Sandbox Code Playgroud)
或者,如果可能的话,最好扩大返回类型,然后返回一些其他实现,您的类可以使用它来强制执行其不变量.例如,如果您不希望人们ArrayList使用getter方法修改您的类型,则可以将类型ArrayList<String>扩展为List<String>并使用不可修改的实现,例如:
public List<String> getStringList() {
return Collections.unmodifiableList(stringList);
}
Run Code Online (Sandbox Code Playgroud)
另一方面,对于setter,它取决于您希望如何处理值.通常,setFoo方法会替换 foo的内容,您当然可以这样做:
public void setStringList(ArrayList<String> stringList) {
this.stringList = stringList;
}
Run Code Online (Sandbox Code Playgroud)
但很可能你也希望扩大你会接受的类型.例如,您可以接受任何Collection而不仅仅是ArrayList:
public void setStringList(Collection<String> strings) {
this.stringList = new ArrayList<>(strings);
}
Run Code Online (Sandbox Code Playgroud)
但是,替代地公开方法以其他方式改变基础列表可能更有用.例如,您可能只想支持向列表中添加新项:
public void addString(String string) {
this.stringList.add(string);
}
public void addStrings(Collection<String> strings) {
this.stringList.addAll(strings);
}
Run Code Online (Sandbox Code Playgroud)
如果你决定要揭露一个setter,它取代了价值,你可能想先检查它的正确性.由于您的类ArrayList在实例初始化程序中初始化,因此您很可能不会期望它将为null.所以你应该抛出异常,如果它是:
public void setStringList(List<String> stringList) {
if (stringList == null) {
throw new NullPointerException("stringList must not be null");
}
this.stringList = stringList;
}
Run Code Online (Sandbox Code Playgroud)
Java 7 Objects.requireNonNull为此提供了一种新方法.
小智 5
要设置该值,您可以将ArrayList<String>传递的参数作为参数,并且只需将 设置ArrayList为该参数即可。
另外,请注意您的问题中使用的void而不是ArrayList<String>显示的。通常,setter 方法不返回任何内容。
public void setStringList(ArrayList<String> stringList)
{
this.stringList = stringList;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
51255 次 |
| 最近记录: |