1

私の理解では、あなたは私が求めていることを実行できないということです. 以下のコードのスター付き ( * ) コメント付きエラーを見ると、私が何にアクセスしようとしているかがわかります。メソッドを使用して多くのオブジェクトを動的に作成し、他のオブジェクトからそれらすべてのオブジェクトにアクセスできるようにするために、これを行う必要があると感じています。

私が行方不明になっているこれを行う方法はありますか、それとも何かを台無しにしているだけですか? そうでない場合、以下と同じ機能を得るにはどうすればよいですか? オブジェクトを渡す以外にこれを行う方法がある場合は、それを高く評価します (オブジェクトを渡すことは、特にオブジェクトの多次元配列の場合、非常に多くの作業のように思えます。パッケージ プライベート オブジェクトをインスタンス化する簡単な方法があるはずです。パッケージ内のどこからでもアクセスできます)。しかし、渡すことが唯一の方法である場合は、特にオブジェクトの束の 2 次元配列を渡す場合に、最善の方法を教えてください。ありがとう!

package simpleclasswithinclasstest;

class Game {

    static int boardSize;
    Engine gameEngine;

    Game() {
    }

    public void run() {
        gameEngine = new Engine();
        gameEngine.play();
    }

    public int getBoardSize() {
        return boardSize;
    }
}

class Engine {

    int boardSize;

    Engine() {
    }

    public void play() {

        this.boardSize = currentGame.getBoardSize(); // *****1 Error is here.
        // *****It doesn't recognize currentGame, but I want it to.
    }

    void doNothing() {
    }
}

class Board {

    Board() {
    }

    void Test() {
        gameEngine.doNothing(); // 2 *****Error is here.
        // *****It doesn't recognize gameEngine.
    }
}

public class SimpleClassWithinClassTest {

    static Game currentGame;

    public static void main(String[] args) {
        currentGame = new Game();
        currentGame.run();
    }
}
4

4 に答える 4

1

これは、ある関数で int 変数を初期化し、別の関数からそれにアクセスしようとするようなものです。

(アクセスしようとしている) オブジェクトは、アクセスしようとしているコードの部分の範囲外です。

この問題this は、パラメーターとして送信し、対応するメソッドでオブジェクトとして受信することで解決できます。

于 2013-09-03T02:21:50.400 に答える
1

コードのその時点で、スコープ内に「currentGame」という名前の変数はありません。

さらに、boardSize は静的パッケージ保護変数ですが、メソッド getBoardSize() はインスタンス変数です。考えられる解決策の 1 つは、メソッドを静的にしてパッケージを保護することです。これを行うことができます。

public void play() {
    this.boardSize = Game.getBoardSize();
}
于 2013-09-03T02:13:51.393 に答える