难以访问包中另一个类的ArrayList

时间:2014-12-02 08:25:32

标签: java object arraylist scope

我的Java经验非常有限,我在同一个包中的另一个文件中访问另一个类中的数组列表时遇到了问题。

在我声明数组的地方似乎并不重要..无法从其他类访问

我的顶级课程就像:

package 1st_class;

import java.awt.*;
import javax.swing.*;
import java.awt.Event.*;
import java.util.ArrayList;

public class 1st_class {


    public void main(String[] args) 
    {
        ArrayList<Test> tests = new ArrayList<Test>(); 
        ArrayList<Score> scores = new ArrayList<Score>();

        tests = new ArrayList<Test>(); 
        scores = new ArrayList<Score>();

        MainMenu Menu1 = new MainMenu();
        Menu1.setVisible(true);
    }
}

这似乎只能识别此代码中的数组。我可以通过在另一个类中使用mainmenu实例并在数组名前加上例如main来引用它们。

我对我猜的范围感到困惑。

6 个答案:

答案 0 :(得分:3)

尝试在您需要的课程中编写getArrayList()方法,或者将其定义为 static

public class 1st_class {
        public static ArrayList<Test> tests = new ArrayList<Test>(); 
        public static ArrayList<Score> scores = new ArrayList<Score>();

    public void main(String[] args) 
    {
        MainMenu Menu1 = new MainMenu();
        Menu1.setVisible(true);
    }
}

public newclass {

    public newclass() {
        1st_class .tests.add(new Test);
    }

}

或者你可以这样做:

 public class 1st_class {
        private ArrayList<Test> tests = new ArrayList<Test>(); 
        private ArrayList<Score> scores = new ArrayList<Score>();

    public void main(String[] args)  {

        MainMenu Menu1 = new MainMenu();
        Menu1.setVisible(true);
    }

    public ArrayList<Test> getArrayList() {
         return tests;
    }
}

public newclass {

    public newclass() {
        ArrayList<Test> temp = new 1st_class().getArrayList();
    }

}

答案 1 :(得分:0)

您的ArrayList变量是main方法的本地变量。为了使它们可以被其他方法/类访问,你应该将它们作为参数传递给那些方法,或者你应该在类级别声明它们。

BTW,您的主要方法缺少static

public class 1st_class {

    private static ArrayList<Test> tests = new ArrayList<Test>(); 
    private static ArrayList<Score> scores = new ArrayList<Score>();

    public static void main(String[] args) 
    {

然而,在OOP中,将它们作为公共成员通常被认为是不好的做法。如果其他类需要访问它们,则应将它们声明为私有,并将公共方法添加到1st_class,这将使其他类可以访问它们。

答案 2 :(得分:0)

如果您希望某个类中的变量对其他人可见,则它必须是公共类字段。现在它是一个块局部变量,只在当前块中可见。

尝试像这样定义它们:

class Something {
    public ArrayList<Test> test = new ArrayList<Test>();
}

请记住,如果你这样做,你然后在函数内部使用它们的类型,或者你将用同名的局部变量覆盖它们。

答案 3 :(得分:0)

您的列表只是在您的主要方法中可见,因此其他主要方法不可见。

公开ArrayList的一种方法是通过访问修饰符,即公开访问您的列表,如下所示:

public class StClass {//i have changed name to follow camel case. Give it meaningful name
    public static ArrayList<Test> tests = new ArrayList<Test>(); 
    public static ArrayList<Score> scores = new ArrayList<Score>();
}

另一种方法是公开getter / setter静态方法,以便您可以在类级别访问,如下所示。

public static ArrayList<Test> getTestList() {
     return tests;
}//and similarly for scores.

然后从另一个包中,将其称为:

StClass.tests

OR

ArrayList<Test> testList = StClass.getTestList();

答案 4 :(得分:0)

如果你想在另一个类中调用它,你应该尝试这样的事情。

package 1st_class;

import java.awt.*;
import javax.swing.*;
import java.awt.Event.*;
import java.util.ArrayList;

public class 1st_class {

    public ArrayList<Test> tests = new ArrayList<Test>(); 
    public ArrayList<Score> scores = new ArrayList<Score>();

    public void main(String[] args) 
    {    
        MainMenu Menu1 = new MainMenu();
        Menu1.setVisible(true);
    }
}

现在,您可以通过以下方式访问测试和分数:

1st_class.tests
1st_class.scores

正如他们告诉你的那样,你应该创建吸气剂/孵化器。如果您创建了getter和setter,则可以将变量更改为private。

public ArrayList<Test> getTests() {
    return tests;
}

public void setTests(ArrayList<Test> tests) {
    this.tests = tests;
}

public ArrayList<Score> getScores() {
    return scores;
}

public void setScores(ArrayList<Score> scores) {
    this.scores = scores;
}

答案 5 :(得分:0)

是的,问题是您要访问的变量的范围或可见性。要从其他类访问数组,您必须将它们创建为类的成员:

public class YourClass {

    public ArrayList<Test> tests = null;
    public ArrayList<Scores> scores = null;

    // I guess you forgot "static" in here
    public static void main(String[] args) {
        // you are in a static context, therefore you have to instantiate the class you want to access
        YourClass myClass = new YourClass();

        // now you can access the fields from your class
        myClass.tests = new ArrayList<Test>(); 
        myClass.scores = new ArrayList<Score>();
    }

}

从同一个包中的另一个类,您也可以访问这些字段:

public class YourOtherClass {
    public void yourMethod() {
        YourClass myClass = new YourClass();
        myClass.tests.add(new Test());

        // should be 1
        System.out.println("The list has the following size:" + myClass.tests.size());
    }
}

直接访问字段通常是一种不好的做法。您可能需要查看encapsulation in Java

亲切的问候

弗洛里安