Getter Setter Returns 没有-Java
Getter Setter Returns Nothing-Java
我的第一个 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﹕ []
顺便说一句,我试图通过将字符串值添加到 class 中的数组列表来在另一个 class 中使用此数组列表。 setList() 可以让它变空吗?我应该说 "return this.list1" 吗?顺便说一下,另一个 class 中有一个数组列表,我正在调用列表。(ArrayList)。 getter 将在另一个 class 中调用以检索此数组列表。这个class就像是两者之间的一个接力
在我的第一个 class 中,我在 IcsList 中设置了 arrayList:
ArrayList<String> arrayList = new ArrayList();
//add to arrayList
IcsList list = new IcsList();
list.list(arrayList);
Class 从 IcsList 检索:
ArrayList<String> arrayList = new ArrayList();
IcsList list = new IcsList();
arrayList= list.setList();
您没有提供完整的综合代码。看起来您在实例化对象 IcsList 之后就从另一个地方调用了 setList()。
我看到它是因为如果你 运行 你的代码原样(假设添加其余部分至少可以编译)那么 logcat 的所有 3 行将是相同的。但是他们都不同,甚至第一和第二。
我的建议是在每个输出中添加特定的详细信息。至少方法名称或堆栈跟踪,您会看到区别 - 谁在调用以及何时调用 - 并且不会混淆。
对于处于这种困境中的任何人,我的 getter-setter:
public class IcsList {
static ArrayList<String> list1;
public IcsList(){
list1 =new ArrayList<String>();}
public static ArrayList<String> getList1(){
return list1;
} }
我在 IcsList 中添加到 ArrayList 的地方 class:
IcsList icsList= new IcsList();
ArrayList<String> arrayList= icsList.getList1();
arrayList.add(event);
arrayList.add(honey);
arrayList.add(happy);
我在哪里检索要在另一个中使用的 ArrayList class:
ArrayList<String> list2= new ArrayList();
list2= IcsList.getList1();
我将其描述为 "relay system."
Taylor:根据你最后的回答——你有一些误解:
Class IcsList 有静态列表 1。这意味着所有实例共享相同的 ONE list1 ArrayList。因此,无论何时何地使用您的 class - 它始终是同一个 list1 对象。
更奇怪 - 你在 IcsList 的构造函数中初始化了这个 list1。这意味着在您至少创建一个 IcsList 实例之前,list1 为空。这是不切实际和令人困惑的。更糟糕的是——每个新的 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;
}
}
那么第二个是正确的(假设蜂蜜是"honey")第三个是
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");
我的第一个 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﹕ []
顺便说一句,我试图通过将字符串值添加到 class 中的数组列表来在另一个 class 中使用此数组列表。 setList() 可以让它变空吗?我应该说 "return this.list1" 吗?顺便说一下,另一个 class 中有一个数组列表,我正在调用列表。(ArrayList)。 getter 将在另一个 class 中调用以检索此数组列表。这个class就像是两者之间的一个接力
在我的第一个 class 中,我在 IcsList 中设置了 arrayList:
ArrayList<String> arrayList = new ArrayList();
//add to arrayList
IcsList list = new IcsList();
list.list(arrayList);
Class 从 IcsList 检索:
ArrayList<String> arrayList = new ArrayList();
IcsList list = new IcsList();
arrayList= list.setList();
您没有提供完整的综合代码。看起来您在实例化对象 IcsList 之后就从另一个地方调用了 setList()。
我看到它是因为如果你 运行 你的代码原样(假设添加其余部分至少可以编译)那么 logcat 的所有 3 行将是相同的。但是他们都不同,甚至第一和第二。
我的建议是在每个输出中添加特定的详细信息。至少方法名称或堆栈跟踪,您会看到区别 - 谁在调用以及何时调用 - 并且不会混淆。
对于处于这种困境中的任何人,我的 getter-setter:
public class IcsList {
static ArrayList<String> list1;
public IcsList(){
list1 =new ArrayList<String>();}
public static ArrayList<String> getList1(){
return list1;
} }
我在 IcsList 中添加到 ArrayList 的地方 class:
IcsList icsList= new IcsList();
ArrayList<String> arrayList= icsList.getList1();
arrayList.add(event);
arrayList.add(honey);
arrayList.add(happy);
我在哪里检索要在另一个中使用的 ArrayList class:
ArrayList<String> list2= new ArrayList();
list2= IcsList.getList1();
我将其描述为 "relay system."
Taylor:根据你最后的回答——你有一些误解:
Class IcsList 有静态列表 1。这意味着所有实例共享相同的 ONE list1 ArrayList。因此,无论何时何地使用您的 class - 它始终是同一个 list1 对象。
更奇怪 - 你在 IcsList 的构造函数中初始化了这个 list1。这意味着在您至少创建一个 IcsList 实例之前,list1 为空。这是不切实际和令人困惑的。更糟糕的是——每个新的 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;
}
}
那么第二个是正确的(假设蜂蜜是"honey")第三个是
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");