簡體   English   中英

有什么更優雅的方式編寫這段代碼?

[英]What is a more elegant way to write this piece of code?

我的方法在另一個類中(讓我們將其稱為“ 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 =新的Whatever(a,b,c,d)---> w.sumArray(a,b))

您可以通過這種方式“靜態”導入方法:

編輯:

import static your.package.name.MethodSumArray.sumArray;

然后可以這樣稱呼它:

sumArray(a,b);

嘗試

import static your.package.tree.MethodSumArray.sumArray;

正如@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 文檔說:

非常謹慎! 僅當您不願意聲明常量的本地副本時才使用它。

由於這是兩個不同的類, 因此必須限定對sumArray的調用(或使用已經建議的靜態導入)。 它們是否在同一程序包中無關緊要-只有類對於范圍很重要。 包有助於構建類和方法保護 (請參閱包私有訪問)。

也就是說,Java包添加任何其他范圍。 也許您將包與C ++命名空間進行了比較,它們確實添加了作用域。 但是這些是不同的概念,不應混為一談。

當然,您也可以聲明一個本地方法來轉發您的調用:

private static int[] sumArray(int[] a, int[] b) {
    return MethodSumArray.sumArray(a, b);
}

但這可能是靜態進口不那么邪惡的一種情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM