0

さて、これは少し厄介です:

私はNetbeansを使用しており、ParameterUIというメインクラスがあります。(これはGUIです)このクラスのGUIにはいくつかのスライダーがあり、これらはプライベートであるため、getBounds()というメソッドがあります。GUIを乱雑にしたくないので、基本的に、計算のためのすべての重要なメソッドは、Structureと呼ばれる別のクラスにあります。したがって、ParameterUIはStructure内のメソッドを呼び出します。このメソッドは、それ自体の内部で別のいくつかのメソッドを呼び出し、これらの1つはgetBoundsを呼び出します。

問題は、getBoundsを静的にできないことですが、静的でない場合は呼び出すことができません。

ParameterUI.class内:

public int[] getBounds () {
    int[] bounds = new int[2];
    bounds[0] = jSlider2.getMinimum();
    bounds[1] = jSlider2.getMaximum();
    return bounds;
}

Structure.class内:

private static void myMethod (Graphics g, double[] planet, long mass) {
    int[] bounds = ParameterUI.getBounds(); //<-- doesn't work
}

myMethodを非静的にすることも役に立たないようです。静的と非静的の基本は知っていますが、クラスなどを使ったプログラミングはそれほど長くありません。

編集:基本的に、私は問題が何であるかを知っており、それを解決するためのより良い方法を探しています。

4

3 に答える 3

3

静的vs非静的

静的とは、そのクラスのオブジェクトをインスタンス化せずにメソッドにアクセスできることを意味します。

非静的とは、そのクラスのインスタンスからのみメソッドにアクセスできることを意味します。

あなたがする必要があるのは、ParameterUIクラスのメソッドを静的にするかどうかを判断することです。

get boundsをStaticに変更すると、機能します。

public static int[] getBounds () {
   int[] bounds = new int[2];
   bounds[0] = jSlider2.getMinimum();
   bounds[1] = jSlider2.getMaximum();
   return bounds;
}

最初にそれについて考えたいと思うかもしれません。

于 2010-08-03T17:11:26.337 に答える
2

ParameterUIインスタンスを静的メソッドに渡します

private static void myMethod (ParameterUI param, Graphics g, double[] planet, long mass) {
    int[] bounds = param.getBounds(); //<-- doesn't work
}

ただし、最初のクラスに関することを計算するために、他のクラスの静的メソッドを呼び出す設計を再検討することをお勧めします。これは、UIクラスに必要なすべてのロジックが含まれておらず、パブリック静的メソッドによってコードのテストが困難になることを示しています。

于 2010-08-03T17:09:09.180 に答える
1

基本:静的メソッドから非静的メンバーにアクセスすることはできません。

インスタンスを作成するか、ParameterUIのインスタンスを静的メソッドに渡す必要があります。

于 2010-08-03T17:13:45.210 に答える