Getter Setter返回Nothing-Java

时间:2015-04-28 01:52:40

标签: java android getter-setter

我的第一个list1和我的列表显示了正确的值,但第二个list1没有显示任何内容:

public class IcsList {
ArrayList<String> list1= new ArrayList<String>();
public ArrayList<String> list(ArrayList list){
     this.list1= list;
    Log.i("list1", "" + list1);
    Log.i("list", "" + list);
    setList();
     return list;
}
public ArrayList setList(){
    Log.i("list1", "" + list1);
    return list1;
   }

这是我的logcat:

04-27 21:45:10.094  31548-31597/com.parse.starter I/list﹕ [B Soccer @ Liberty, Apr 28 2015 5:30 PM, KGHS Athletics, G Soccer v Liberty (home), Apr 28 2015 5:30 PM, KGHS Athletics
04-27 21:45:10.133  31548-31597/com.parse.starter I/list1﹕ [B Soccer @ Liberty, Apr 28 2015 5:30 PM, KGHS Athletics, G Soccer v Liberty (home), Apr 28 2015 5:30 PM, KGHS Athletics
 04-27 21:45:10.133  31548-31548/com.parse.starter I/list1﹕ []

顺便说一下,我试图通过将字符串值添加到该类中的数组列表来在另一个类中使用这个arraylist。 setList()可以将其变为空吗?我应该说“return this.list1”。顺便说一句,在另一个类中有一个arraylist,我正在调用list。(ArrayList)。将在另一个类中调用getter以检索此arraylist。这个类就像是两者之间的接力。

在我的第一个类中,我在IcsList中设置了arrayList:

ArrayList<String> arrayList = new     ArrayList();
 //add to arrayList
 IcsList list = new IcsList();
 list.list(arrayList);

从IcsList检索的类:

  ArrayList<String> arrayList = new     ArrayList();

 IcsList list = new IcsList();
arrayList=  list.setList();

3 个答案:

答案 0 :(得分:2)

泰勒:基于你自己的最后答案 - 你有一些误解:

类IcsList具有静态list1。这意味着所有实例共享相同的ONE list1 ArrayList。因此,无论何时何地使用您的类 - 它始终是一个相同的list1对象。

更奇怪的是 - 你在IcsList的构造函数中初始化这个list1。这意味着在您创建至少一个IcsList实例之前,list1为null。这是不切实际和令人困惑的。更糟糕的是 - 每个新的IcsList()都会使用新的新的ArrayList更新这个list1。这也很奇怪。

您的上一个代码显示您创建了list2,然后立即覆盖它的list1引用。这没有任何意义。

我认为你想要的是这个:

public class IcsList {
private ArrayList<String> list1;
   public IcsList(){
      list1 =new ArrayList<String>();
   }


   public static ArrayList<String> getList1(){
      return list1;
   } 
}

然后第二个是正确的(假设蜂蜜是“蜂蜜”),第三个是

ArrayList<String> list2= = icsList.getList1(); // this is list1 from existing object icsList
if (list2.contains(honey)) System.out.println("honey is here");
if (icsList.getList1().contains(honey)) System.out.println("honey is still here");

答案 1 :(得分:1)

您没有提供完整的综合代码。看起来你刚刚在实例化对象IcsList之后从另一个地方调用了setList()。

我看到它是因为如果你按原样运行代码(假设将其余部分添加到至少编译),则所有3行logcat都是相同的。然而,它们都是不同的,甚至是第一和第二。

我的建议是为每个输出添加特定的详细信息。至少方法名称或堆栈跟踪,您将看到差异 - 谁在呼叫以及何时 - 并且不会产生混淆。

答案 2 :(得分:1)

对于处于这种困境的任何人,我的吸气者:

public class IcsList {
static ArrayList<String> list1;
public IcsList(){
    list1 =new ArrayList<String>();}


public static ArrayList<String> getList1(){
return list1;
} }

我添加到IcsList类中的ArrayList:

IcsList icsList= new IcsList();
ArrayList<String> arrayList= icsList.getList1();
arrayList.add(event);
arrayList.add(honey);
arrayList.add(happy);

我检索ArrayList以在另一个类中使用:

ArrayList<String> list2= new ArrayList();
list2= IcsList.getList1();

我会将其描述为“中继系统”。