[英]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);
這也將得出正確的結果,但是這種解決方案使我想知道,對於這種類型的練習,哪種方法更實用/更正確:
您可以通過這種方式“靜態”導入方法:
編輯:
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.