1

私は比較的Javaが初めてで、javafxで少し実験しています

クラスBのメソッドを使いながら、クラスAの変数を変更したい

Main: これはメイン クラスです。必要なものがすべて含まれています (primaryStage などを表示します)。コンストラクターがあるため、実際の「メイン オブジェクト」は作成されません。

public class Main extends Application {
Sub sub = new Sub();
int a;

// stuff

public void aMethod() {
sub.subMethod();
}

}

Sub: このクラスは、変数 a を変更することのみを想定しており、「サブオブジェクト」を作成するコンストラクターは含まれていません。

public class Sub {
//stuff

subMethod(){
int a = 5;
}

この行Main main;を Sub クラスに入れると、subMethod() を呼び出すと、プログラムによって nullpointer 例外が発生します。わかりました...私は実際にメインオブジェクトを作成していなかったと思います...これまでのところとても良いです。

しかし...行に入れてMain main = new Main();も、プログラムは「アプリケーションの実行中に例外」エラーを表示し始めません

奇妙なことですが、Main main = new Main();subMethodに行を入れると...

subMethod(){
Main main = new Main();
int a = 5;
}

...気の毒なことは実際に機能します...(メソッドを呼び出すたびに新しいオブジェクトを作成するため、遅いと思います)

どうしてこんなことに?

そしてそれはどのように正しく行われますか?:) (他のクラスのメソッドを使用して変数を「上書き」します)

よろしくレッド

4

2 に答える 2

0

したがって、別のクラスのフィールドの値を変更するメソッドが必要です。これを行うにはいくつかの方法があります。このクラスがあれば

public Class A {
   private int a;
   ...

   public void setA(int a) {
      this.a = a;
   }
}

このようなことができます

public Class B {
   private static A instance;

   ....

   public static void setA(int a) {
      instance.setA(a);
   }
}

または、 set メソッドへのパラメーターとして A in を取得できます

 public Class B {
  ...

   public static void setA(A a, int val) {
       a.setA(val);
   }
}

フィールドに直接アクセスしたい場合はA、それらをパブリックにする必要があります (これは通常、他のクラスが必要とするアクセスだけを与えるのではなく、完全なアクセスを与えるため、やりたいことではありません)

Public Class A {
  public int a;
  ...
}

それからあなたはすることができます

Public Class B {
    ...
    public static void setVal(A a, int val) {
         a.a = val;
     }
}

setAまた、メソッドを持っていない場合は、のBようstaticに呼び出す必要がありますinstanceB

B b = new B();
b.setA(a, val);

静的であるかのように、class B

B.setA(a, val);
于 2012-04-17T16:28:39.053 に答える
0

Mainプログラム内で のインスタンスを複数作成しないでください。おそらくMain、変更可能な状態 (クラス メンバー) を格納するのに最適な場所ではありませんが、必要な場合は、のインスタンスをに渡す必要がありますMain(subMethod公開aするか、公開セッター メソッドを提供します)。

public class Main extends Application {
Sub sub = new Sub();
public int a;

// stuff

public void aMethod() {
sub.subMethod(this);
}

}

public class Sub {
//stuff

subMethod(Main main){
main.a = 5;
}
于 2012-04-17T16:23:56.810 に答える