0

好吧,这有点乱:

我正在使用 Netbeans,并且我有一个名为 ParameterUI 的主类。(这是一个 GUI)这个类在它的 GUI 上有几个滑块,因为这些是私有的,所以我有一个名为 getBounds() 的方法。我不想弄乱我的 GUI,所以基本上计算东西的所有重要方法都在另一个名为 Structure 的类中。因此 ParameterUI 调用了 Structure 中的一个方法,该方法调用了自身内部的另外几个方法,其中一个调用了 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

静态与非静态

静态意味着您可以在不实例化该类的对象的情况下访问方法。

非静态意味着您只能从该类的实例访问方法。

您需要做的是弄清楚您是否希望 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 回答