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