编写这段代码的更优雅的方法是什么?

时间:2017-10-26 13:24:19

标签: java

我的方法在另一个类中(我们称之为“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);

这也会带来正确的结果,但是这个解决方案让我想知道,这种练习的正确方法是什么?

  1. 只使用我的方法创建一个Main类,以便在不调用另一个类的情况下调用它(ClassName.SumArray(a,b)),
  2. 制作一个主类,然后制作辅助类,我宣布我的方法 然后利用重载来调出我需要的任何方法来执行我的程序? (无论w = new Whatever(a,b,c,d)---&gt; w.sumArray(a,b))

4 个答案:

答案 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);
}

但这可能是静态进口是较小的邪恶的一种情况。