Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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_Oop_Arraylist - Fatal编程技术网

Java 在类中使用ArrayList作为静态属性?

Java 在类中使用ArrayList作为静态属性?,java,oop,arraylist,Java,Oop,Arraylist,有点纠结于某事。我已经建立了一个概念证明,并在谷歌上搜索,但找不到理由 我目前正在尝试使用ArrayList作为类中的静态属性来存储一系列条目。唯一的问题是,每次我尝试添加到Totalentries数组列表时,都会得到一个nullPointerError 希望您能给我一些指导,告诉我哪里出了问题 我的班级: import java.util.ArrayList; public class Competition { private static ArrayList totalentries;

有点纠结于某事。我已经建立了一个概念证明,并在谷歌上搜索,但找不到理由

  • 我目前正在尝试使用ArrayList作为类中的静态属性来存储一系列条目。唯一的问题是,每次我尝试添加到Totalentries数组列表时,都会得到一个nullPointerError 希望您能给我一些指导,告诉我哪里出了问题

    我的班级:

    import java.util.ArrayList;
    
    
    public class Competition {
    private static ArrayList totalentries;
    
    public Competition(){
    
    
    }
    public void newEntry(){
        totalentries.add("an Entry");
    }
    
    }
    
    我的测试代码:

    public class testEntries {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            Competition myComp=new Competition();
            myComp.newEntry(); //Null Pointer comes here!
            myComp.newEntry();
            myComp.newEntry();
            myComp.newEntry();
            myComp.newEntry();
            myComp.newEntry();
    
            myComp.toString();
        }
    
    }
    

    您从未在竞赛类中实例化过
    totalentries

    您将需要以下内容:

    private static ArrayList totalentries = new ArrayList();
    
    但是,请注意,我建议不要保持这种“静态”。否则,您创建的每个“竞争”都将共享相同的条目列表,这可能不是您真正想要的

    另外,使用接口声明类型,而不是使用类型实例化。您可能还想在这里使用泛型。因此更好(并且遵循标准命名约定):

    private List totalEntries=new ArrayList();
    
    totalentries
    未初始化,它指向
    null
    。这样做:

    private static List<String> totalentries = new ArrayList<String>();
    
    private static final ArrayList<String> totalentries = new ArrayList<String>();
    
    private static List totalentries=new ArrayList();
    
    使用前必须创建列表,请重试 totalentries=新的ArrayList()


    您还应该使用列表代替totalentries变量,以允许将te ArrayList与例如LinkedList进行交换。

    您永远不会创建
    ArrayList
    。试试这个:

    private static ArrayList totalentries = new ArrayList();
    
    尽管最好使用泛型并获得编译时安全性:

    private static ArrayList<String> totalentries = new ArrayList<String>();
    
    private static ArrayList totalentries=new ArrayList();
    
    由于此列表包含属性,因此您不希望替换它,因此,如果您将其定义为:

    private static List<String> totalentries = new ArrayList<String>();
    
    private static final ArrayList<String> totalentries = new ArrayList<String>();
    
    private static final ArrayList totalentries=new ArrayList();
    
    实际上,这些都不是好主意,因为您可以同时更改类的多个实例
    totalentries
    。如果这是您的意图,多个
    竞争
    s使用一个静态
    totalentries
    进行存储,那么您最好在单独的类中跟踪该数据


    如果您一次只使用一个
    竞争
    ,那么请删除
    静态
    关键字。

    正如下面许多人所指出的(让我们看看有多少人回答这个问题!)--您永远不会实例化ArrayList。为什么一开始是静态的?这个变量不应该是静态的。它的类型应该是列表。谢谢你清理它。我做了更多的研究,现在更了解这一点!谢谢:)谢谢你的详细帮助!我读了更多,现在明白我的错误了!