0

たとえば、Movie オブジェクトのリストを含む MovieDatabase クラスがあります。私のメイン コードでは、MovieDatabase 内のすべてのオブジェクトを初期化します。ただし、この MovieDatabase を別のクラスで呼び出して、ライブラリにアクセスしたいと考えています。どうすればいいですか?

メイン コードに get メソッドを追加して、それを返しますか? または、別の方法があります (たとえば、オブジェクトのリストを保護/公開に変更しますか?)

ありがとう!

コードは、Main、MovieDatabase、および Movie の 3 つの別個のクラスであるはずです。

movieDatabase のインスタンスは Main で初期化されます。構築時に 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

4 に答える 4

1

NameLibrary に依存するクラスがある場合は、コンストラクターまたは set メソッドを介してそれを注入する必要があります。

于 2013-11-11T14:13:37.647 に答える
0

int x他のクラスからアクセスできるようにしたい場合は、次のように記述します。

public class myClass{
    public int x = 0;
}

他のクラスからアクセスするには、次のように記述します。

myClass.x ... (do something)
于 2013-11-11T14:22:22.533 に答える
0

まず、表示するコードがなければ、実際にどのような問題が発生しているかを評価するのは困難です。ただし、 public static void main(String args[]){}; のように、main メソッドについて言及します。

このメイン メソッドは、アプリケーションを実行するために特別に設計されています。コンパイラはその特定のメソッドを必要とします。アクセサ メソッドとして使用するようには設計されていません。

public int getValue(){
return value;}

main メソッド変数にアクセスできない理由はこれだけではありません。main には (void の使用により) 戻り値の型がなく、さらに SCOPE の考え方 (各メソッドにはスコープがあり、変数を含むすべてのメソッドはその変数を見ることができますが、それ以外のメソッドは変数なしで直接見ることはできません。戻り型) スコープを使用して、メソッドまたはクラスの外部でアクセスできるものとアクセスできないものを制限します (そのため、アクセシビリティを制限するために、クラス変数は通常プライベートになります)

于 2013-11-11T14:18:40.680 に答える
0

内のリストを返す getter メソッドを作成しますNameLibrary。他のクラスが拡張されNameLibraryている場合は、クラスへのオブジェクト参照を使用してこの getter メソッドを呼び出すことができますNameLibrary

于 2013-11-11T14:19:32.090 に答える