Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中为类对象提供不同的ArrayList_Java_Class_Arraylist - Fatal编程技术网

在Java中为类对象提供不同的ArrayList

在Java中为类对象提供不同的ArrayList,java,class,arraylist,Java,Class,Arraylist,我有一个类,这个类有一个公共元素ArrayList myList。(我的类中也有其他元素,但它们与这个元素无关) 我想做的是为不同的类对象创建不同的ArrayList。但是,当我尝试编写此代码时,即使我使用不同的类对象,代码也会在单个ArrayList中保留每个条目。我做错了什么 这就是我所尝试的: 我的班级: public class myClass { public static ArrayList myList; public static ArrayList getList() {

我有一个类,这个类有一个公共元素ArrayList myList。(我的类中也有其他元素,但它们与这个元素无关)

我想做的是为不同的类对象创建不同的ArrayList。但是,当我尝试编写此代码时,即使我使用不同的类对象,代码也会在单个ArrayList中保留每个条目。我做错了什么

这就是我所尝试的: 我的班级:

public class myClass {

public static ArrayList myList;
public static ArrayList getList() {
    return myList;
}
public static void setList(ArrayList myList) {
    myClass.myList = myList;
}
大体上:

 myClass my = new myClass();
 myClass my2 = new myClass();
 ArrayList tmp = new ArrayList();
 ArrayList tmp2 = new ArrayList();
 tmp.add("aaaaa");
 tmp.add("bbbbb");
 tmp2.add("ccccc");
 tmp2.add("ddddd");
 my.setList(tmp);
 my2.setList(tmp2);
 for(int i=0;i<my.getList().size();i++)
 {
 System.out.println(my.getList().get(i));
 }
但我希望它是:

aaaaa
bbbbb

我做错了什么?

您在课堂上使用的是static


删除类中变量的static关键字,您应该会没事的。静态是类作用域,因此将在对象之间共享。

您在类中使用静态


删除类中变量的static关键字,您应该会没事的。静态是类的作用域,因此将在对象之间共享。

您声明了myClass#myList Static,这意味着在类myClass中只存在一个myList实例。声明为非静态,包括getter和setter,以使my和my2具有不同的实例,您就可以开始了。

您声明了myClass#myList static,这意味着myList在myClass类中只存在一个实例。声明它是非静态的,包括getter和setter,以使my和my2具有不同的实例,就可以开始了。

如下修改您的类

public class myClass {

    public ArrayList myList;
    public ArrayList getList() {
    return myList;
}
public void setList(ArrayList myList) {
    listler.myList = myList;
}

您正在使用的是静态
数组列表myList
,这是类的所有对象所共有的
myClass
。因此,你没有得到你所期望的。如果需要对类的所有对象分别使用
ArrayList myList
,请避免使用static


Java允许您访问类的静态成员,既可以通过对象访问,也可以通过将静态成员与其类名关联来访问,但将静态成员与类对象关联是一种不好的做法


将静态成员本身与类对象关联实际上是语言设计本身的一个缺陷(因此,应该避免使用对象访问它们),这一缺陷已被C#纠正,因此在C#中,您不能将静态成员与相应的类对象关联



在java中,如果您试图使用相应的类对象访问静态成员,某些IDE可能会发出警告或错误。

按如下方式修改您的类

public class myClass {

    public ArrayList myList;
    public ArrayList getList() {
    return myList;
}
public void setList(ArrayList myList) {
    listler.myList = myList;
}

您正在使用的是静态
数组列表myList
,这是类的所有对象所共有的
myClass
。因此,你没有得到你所期望的。如果需要对类的所有对象分别使用
ArrayList myList
,请避免使用static


Java允许您访问类的静态成员,既可以通过对象访问,也可以通过将静态成员与其类名关联来访问,但将静态成员与类对象关联是一种不好的做法


将静态成员本身与类对象关联实际上是语言设计本身的一个缺陷(因此,应该避免使用对象访问它们),这一缺陷已被C#纠正,因此在C#中,您不能将静态成员与相应的类对象关联



在java中,如果您试图使用相应的类对象访问静态成员,某些IDE可能会发出警告或错误。

如其他注释所示,您将ArrayList声明为static,这意味着它在类的所有对象实例中共享-如下所示:

my.setList(tmp);
my2.setList(tmp2);
…第二个设置列表覆盖第一个设置列表

请继续阅读Singleton模式,了解如何使用静态字段的示例:

作为旁白,考虑将你的值传递给构造函数,只提供一个吸气剂,从而封装使用ARARYLIST并使值不可变——例如:

myClass my = new myClass("aaaa", "bbbb");
String element = my.get(0);
最后,如果使用Java 5或6,请考虑在使用集合/列表时使用泛型:

List<String> tmp = new ArrayList<String>();
List tmp=newarraylist();

希望这会有所帮助。

正如其他注释所指出的,您将ArrayList声明为static,这意味着它在类的所有对象实例中共享,如下所示:

my.setList(tmp);
my2.setList(tmp2);
…第二个设置列表覆盖第一个设置列表

请继续阅读Singleton模式,了解如何使用静态字段的示例:

作为旁白,考虑将你的值传递给构造函数,只提供一个吸气剂,从而封装使用ARARYLIST并使值不可变——例如:

myClass my = new myClass("aaaa", "bbbb");
String element = my.get(0);
最后,如果使用Java 5或6,请考虑在使用集合/列表时使用泛型:

List<String> tmp = new ArrayList<String>();
List tmp=newarraylist();
希望有帮助