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

如何从Java中的另一个类调用非静态方法?,java,static-classes,Java,Static Classes,好吧,这有点乱: 我使用的是Netbeans,我有一个名为ParameterUI的主类。这是一个图形用户界面 这个类的GUI上有几个滑块,由于它们是私有的,所以我有一个名为getBounds的方法。我不想把我的GUI弄得乱七八糟,所以基本上所有重要的计算方法都在另一个名为Structure的类中。所以ParameterUI在结构中调用一个方法,该方法在自身内部调用另外几个方法,其中一个调用getBounds 问题是getBounds不能是静态的,但如果不是,我就不能调用它 在ParameterU

好吧,这有点乱:

我使用的是Netbeans,我有一个名为ParameterUI的主类。这是一个图形用户界面 这个类的GUI上有几个滑块,由于它们是私有的,所以我有一个名为getBounds的方法。我不想把我的GUI弄得乱七八糟,所以基本上所有重要的计算方法都在另一个名为Structure的类中。所以ParameterUI在结构中调用一个方法,该方法在自身内部调用另外几个方法,其中一个调用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非静态似乎也没有帮助。 我担心,虽然我知道静态与非静态的基本知识,但我已经很久没有使用类等编程了


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

将ParameterUI实例传递给静态方法

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

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

将ParameterUI实例传递给静态方法

private static void myMethod (ParameterUI param, Graphics g, double[] planet, long mass) {
    int[] bounds = param.getBounds(); //<-- doesn't work
}
但是,您可能需要重新考虑这样一种设计,即调用其他类的静态方法来计算第一个类的内容。这表明UI类所需的所有逻辑都不包含在其中,而公共静态方法会导致难以测试代码。

静态与非静态

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

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

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

如果将get边界更改为静态,那么它将工作

public static int[] getBounds () {
   int[] bounds = new int[2];
   bounds[0] = jSlider2.getMinimum();
   bounds[1] = jSlider2.getMaximum();
   return bounds;
}
您可能需要首先考虑它。

静态与非静态

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

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

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

如果将get边界更改为静态,那么它将工作

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

您可能需要先考虑一下。

基础:您不能从静态方法访问非静态成员


您将需要创建ParameterUI的实例或在静态方法中向/传递ParameterUI的实例

基础:您不能从静态方法访问非静态成员

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

您将需要创建参数UI的实例或将参数UI的实例传递给/在静态方法中

如果是实例方法,为什么不能调用getBounds?不能从静态方法访问非静态方法。如果是实例方法,为什么不能调用getBounds?不能从静态方法访问非静态方法。谢谢!是的,我最初认为将GUI与代码的其余部分分离是一个好主意,因为我使用Netbeans特性来实现它,而不是手工实现,但是将所有方法迁移到一个类中可能更容易。将ParameterUI实例传递给特定的静态方法实际上是一件非常痛苦的事情,因为它在我的程序中的位置,无论如何。谢谢!是的,我最初认为将GUI与代码的其余部分分离是一个好主意,因为我使用Netbeans特性来实现它,而不是手工实现,但是将所有方法迁移到一个类中可能更容易。将ParameterUI实例传递给特定的静态方法实际上是一件非常痛苦的事情,因为在任何情况下,它都在我的程序中。因为我自己没有创建GUI,我不能将getBounds设置为静态。如果我创建了,它就不能访问非静态的私有JSlider。我希望它们是静态的……因为我自己还没有创建GUI,我不能将getBounds设置为静态的。如果我这样做,它就不能访问非静态的私有JSlider。我希望它们是静态的。。。
private static void myMethod (ParameterUI param, Graphics g, double[] planet, long mass) {
    int[] bounds = param.getBounds(); //<-- doesn't work
}