我有一个带有返回对象的构造函数的类。我正在将这些对象添加到列表中,但是遇到了麻烦,因为每次我添加一个新元素时,它都会用我正在添加的当前元素替换之前的元素。
以下是列表和输出:
Objects a = new Objects("test1");
Objects b = new Objects("test2");
List<Objects> c = new ArrayList();
c.add(a);
c.add(b);
System.out.println(c.get(0).getTest());
System.out.println(c.get(1).getTest());
这是输出:
test2
test2
这是创建/返回对象的类:
public class Objects
{
public static String test;
public Objects (String test)
{
this.test = test;
}
public String getTest()
{
return test;
}
}
答案 0 :(得分:2)
删除Objects
中类成员test
的静态内容:
public class Objects
{
public String test;
public Objects (String test)
{
this.test = test;
}
public String getTest()
{
return test;
}
}
然后你会得到所需的输出:
Test1
的Test2
有时,您希望拥有所有对象共有的变量。这是通过静态修改器完成的。在声明中具有static修饰符的字段称为静态字段或类变量。它们与类相关联,而不是与任何对象相关联。
答案 1 :(得分:1)
静态是这里的问题。删除静态,它将正常工作。使用像这个示例的静态不是一个好习惯,请阅读here。
答案 2 :(得分:0)
将static
更改为private static int i = 0;
Java中的i++
关键字意味着变量或函数在该类的所有实例之间共享,因为它属于该类型,而不是实际的对象本身。
因此,如果您有一个变量:AppCompatActivity
并在一个实例中递增它(<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
</android.support.design.widget.TabLayout>
<android.support.v4.view.ViewPager
android:id="@+id/vp_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
android:visibility="visible">
</android.support.v4.view.ViewPager>
),则更改将反映在所有实例中。我现在在所有情况下都是1。
答案 3 :(得分:0)
public static String test;
这就是问题所在。 test
是类级变量,因此您只需修改它,而不是创建新的变量。此外,通常您将变量设为私有,并为变量提供getter和setter。这称为encapsulation
答案 4 :(得分:0)
由于您已将test
声明为静态,因此所有Objects
个实例都将使用相同的变量。所以它不会覆盖列表中的对象。它覆盖了test
的价值。
解决方案:
删除静态修改器
public String test;