我的方法在另一个类中(我们称之为“MethodSumArray”如下:
public static int [] sumArray(int [] a, int [] b) {
int [] c = new int [a.length];
for(int i = 0 ; i<a.length;i++)
c[i] = a[i] + b[i];
System.out.println("The sum of the array is :" + Arrays.toString(c));
return c;
}
在我的Main类中(我们称之为“微积分”)我可以使用以下代码调用此方法:
MethodSumArray.sumArray(a,b);
这会在我的屏幕上打印出例如所需的结果:
int [] a = {1,2,3};
int [] b = {1,2,3};
结果将是:[2,4,6] as expected
我的问题是,如果不编写“MethodSumArray.sumArray”,可以用另一种方式调用吗?
修改
我通过使用重载方法修改了Main类:
Whatever w = new Whatever (a,b,c,d)
w.sumArray(a,b);
这也会带来正确的结果,但是这个解决方案让我想知道,这种练习的正确方法是什么?
答案 0 :(得分:1)
您可以导入您的方法&#34;静态&#34;就这样:
编辑:
import static your.package.name.MethodSumArray.sumArray;
然后你就可以这样称呼它:
sumArray(a,b);
答案 1 :(得分:1)
尝试
nproc
答案 2 :(得分:0)
正如@Petar所建议的那样,你可以使用静态导入,虽然使用静态导入会使你的代码更难以阅读,所以应该谨慎使用它们。
您可以按如下方式定义MethodSumArray
课程:
package testPack;
import java.util.Arrays;
public class MethodSumArray {
public static int[] sumArray(int[] a, int[] b) {
int[] c = new int[a.length];
for (int i = 0; i < a.length; i++)
c[i] = a[i] + b[i];
System.out.println("The sum of the array is :" + Arrays.toString(c));
return c;
}
}
然后在你的主要课程中:
package testPack;
import static testPack.MethodSumArray.sumArray;
public class Main {
public static void main(String[] args) {
sumArray(a, b);
}
}
什么时候你使用静态导入? Java docs说:
非常谨慎!只有在您想要宣布时才使用它 常量的本地副本。
答案 3 :(得分:0)
由于这些是两个不同的类,因此必须限定对sumArray
的调用(或使用已建议的静态导入)。它们是否在同一个包中并不重要 - 只有课程对范围很重要。
包有助于构建类和方法 protection (参见包私有访问)。
也就是说,Java包不添加任何其他范围。 也许您将包与C ++命名空间进行比较,这些命名空间确实添加了范围块。但这些是不同的概念,不应混为一谈。
当然,您也可以声明一个转发您的电话的本地方法:
private static int[] sumArray(int[] a, int[] b) {
return MethodSumArray.sumArray(a, b);
}
但这可能是静态进口是较小的邪恶的一种情况。