如何使Main中的变量可供其他类访问?

时间:2013-11-11 14:12:08

标签: java

例如,我有一个包含Movie对象列表的MovieDatabase类。在我的主代码中,我初始化MovieDatabase中的所有对象。但是,我希望在另一个类中调用此MovieDatabase来访问该库。我该怎么做?

我是否在主代码中添加了get方法并将其返回?或者有另一种方式(例如,将对象列表更改为protected / public?)

谢谢!

代码应该是3个单独的类,Main,MovieDatabase&电影。

在Main中初始化movieDatabase的实例。在构造时,它调用loadMovieList()并从文本文件中填充列表。但是我希望从另一个类调用movieDatabase的相同实例来访问电影,这样我就不必重复加载了。

public class Main {

public static void main(String[] args) {
    MovieDatabase movieDatabase = new MovieDatabase();
}

public class MovieDatabase {
ArrayList<Movie>movieList = new ArrayList<Movie>();
String fileAddress = "D:/Users/Mine/School/Java/CZ2002_Assignment/src/MovieDatabase/movieDatabase.txt";

public MovieDatabase()
{
    numOfMovie=0;
    loadMovieList();
}

public int getNumOfMovie() {
    return numOfMovie;
}

public void addMovieToList(Movie movie) {
    movieList.add(movie);
    numOfMovie++;
}

public Movie selMovieByID(int movieID) {
    int index=-1;
    for (Movie m : movieList) {
            index++;   
            if (m.getMovieID() == movieID)
                break;
    }
    return selMovieByIndex(index);
}


public Movie selMovieByIndex(int index) {
    return movieList.get(index);
}

public void loadMovieList()
{
    //loads through text file
    addMovieToList(new Movie(tempMovie));
    System.out.println("Movie Database loaded");
}

public class Movie{
private int movieID;
private String movieName;
private int movieDuration;  //in minutes;
private String movieRating; //G; PG; PG13; NC16; M18; R21;
private boolean has3D;
private boolean status; 
}

4 个答案:

答案 0 :(得分:1)

如果你有一个依赖于NameLibrary的类,你应该通过构造函数或set方法注入它。

答案 1 :(得分:0)

首先,如果没有任何代码向我们展示,很难评估您真正遇到的问题。 但是你提到主要方法,如 public static void main(String args []){};

这个main方法是专门为运行应用程序而设计的,你的编译器需要那个特定的方法,它不是设计用作访问器方法 e.g。

public int getValue(){
return value;}

这不是您无法访问main方法变量的唯一原因。 main没有返回类型(由于使用了void)加上SCOPE的想法(每个方法都有一个范围,任何包含变量的方法都可以看到该变量,但是除了它之外没什么可以直接看到它而没有返回类型)您使用范围来限制可以访问的内容或在方法或类之外无法访问的内容(这就是为什么类变量通常具有私有,以限制可访问性)

答案 2 :(得分:0)

创建一个getter方法,返回NameLibrary内的列表。如果您的其他类从NameLibrary延伸,则可以使用对象引用调用此getter方法。

答案 3 :(得分:0)

如果您希望可以从其他类访问int x,请编写:

public class myClass{
    public int x = 0;
}

要从其他类访问它,只需写:

myClass.x ... (do something)