如何从Java中的另一个类调用非静态方法?

时间:2010-08-03 17:05:39

标签: java static-classes

好的,这有点乱:

我正在使用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非静态似乎也没有帮助。 我担心虽然我知道静态与非静态的基础知识,但我还没有用类等编程。

编辑:基本上,我知道问题是什么,我正在寻找一种更好的解决方法。

3 个答案:

答案 0 :(得分:2)

将ParameterUI实例传递给静态方法

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

但是,您可能需要重新考虑一个设计,在该设计中,您要调用其他类的静态方法,以便计算有关第一个类的内容。这表明您的UI类所需的所有逻辑都不包含在其中,并且公共静态方法导致难以测试代码。

答案 1 :(得分:2)

静态与非静态

静态意味着您可以访问方法而无需实例化该类的对象。

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

您需要做的是确定您是否希望ParameterUI类中的方法是静态的。

如果您将get bounds更改为Static,那么它将起作用。

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

你可能想先考虑一下。

答案 2 :(得分:1)

基础知识:您无法从静态方法访问非静态成员。

您需要在静态方法

中创建实例或将ParameterUI的实例传递给/