Java中ArrayList的getter和setter
如何在Java中为ArrayList使用getter和setter?这是我的。我认为我正确地使用了getter,但我不知道如何为ArrayList使用setterJava中ArrayList的getter和setter,java,arraylist,getter-setter,Java,Arraylist,Getter Setter,如何在Java中为ArrayList使用getter和setter?这是我的。我认为我正确地使用了getter,但我不知道如何为ArrayList使用setter private ArrayList<String> stringlist = new ArrayList<String>(); public ArrayList<String> getStringList() { return stringlist; } public 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
}
private ArrayList stringlist=new ArrayList();
公共ArrayList getStringList(){
返回字符串列表;
}
public ArrayList setStringList(){
//我不知道该在这里放什么
//我也不知道我的返回值是否正确
}
一个典型的setter应该是这样的:
public void setStringList(ArrayList<String> stringList) {
this.stringList = stringList;
}
要设置该值,可以将
ArrayList
作为参数传递,只需将ArrayList
设置为参数
另外,请注意问题中使用的是void
,而不是ArrayList
。通常,setter方法不返回任何内容
public void setStringList(ArrayList<String> stringList)
{
this.stringList = stringList;
}
public void setStringList(ArrayList stringList)
{
this.stringList=stringList;
}
作为程序员,我们做的最简单的事情之一就是传递数据。执行此操作的传统方法是定义JavaBean:
public class DataHolder {
private String data;
public DataHolder() {
}
public void setData(String data) {
this.data = data;
}
public String getData() {
return this.data;
}
}
相反,我更喜欢C struct风格的编写只保存数据的类:
public class DataHolder {
public final String data;
public DataHolder(String data) {
this.data = data;
}
}
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");
}
或者,如果可能的话,最好扩大返回类型,然后返回一些其他实现,您的类可以使用这些实现来强制执行其不变量。例如,如果不希望人们使用getter方法修改ArrayList
,可以将类型从ArrayList
扩展到List
,并使用不可修改的实现,例如:
public List<String> getStringList() {
return Collections.unmodifiableList(stringList);
}
但最有可能的是,你还想扩大你将接受的类型。例如,您可以接受任何集合
,而不仅仅是数组列表
:
public void setStringList(Collection<String> strings) {
this.stringList = new ArrayList<>(strings);
}
Java 7为此添加了一个新方法。您可以使用构造函数来分配数组,而不是setter函数。 比如:
公共类CLL扩展了ArrayAdapter{
ArrayList-lbean;
公共CLL(上下文,ArrayList-lList){
super(context,R.layout.custom_layoutT,lList);
this.lbean=llist;
}
//吸气剂函数
}
对于setter,您需要一个参数,例如setStringList(ArrayList list)
,并且在函数dostringlist=list
中,该方法的返回类型是ArrayList还是void?或者别的什么?除非特别告诉你,你通常不需要返回二传手。您可以将退货类型更改为作废。回答正确。您可能还想选择一个更具描述性的方法名称,例如setCompanyNames
,以符合业务逻辑的含义,而不是setStringList
。我认为这应该是公认的答案,因为它处理封装、可变性/防御性复制和“编程到接口”等重要概念(使用API中的List
/Collection
vsArrayList
)。创建setter并开始使用getter和setter后,我意识到了这一点。这是一个非常好的答案。我特别喜欢你解释getter
的“不可修改的实现”和“公开方法以改变基础列表”的方式对于设置器
。
public List<String> getStringList() {
return Collections.unmodifiableList(stringList);
}
public void setStringList(ArrayList<String> stringList) {
this.stringList = stringList;
}
public void setStringList(Collection<String> strings) {
this.stringList = new ArrayList<>(strings);
}
public void addString(String string) {
this.stringList.add(string);
}
public void addStrings(Collection<String> strings) {
this.stringList.addAll(strings);
}
public void setStringList(List<String> stringList) {
if (stringList == null) {
throw new NullPointerException("stringList must not be null");
}
this.stringList = stringList;
}
public class CLL extends ArrayAdapter<LBean> {
ArrayList<LBean> lbean;
public CLL(Context context, ArrayList<LBean> lList) {
super(context, R.layout.custom_layoutT, lList );
this.lbean=llist;
}
//getter functions
}