2013-02-08 28 views
1

如何在Java中调用数组函数?在Java中调用重载函数?

目前,它看起来像:

public static void WriteLine(Object Array[]) { 
    for (int I = 0; I < Array.length; ++I) { 
     Out.println(Array[I]); 
    } 
} 

public static void WriteLine(Object Text) { 
    Out.println(Text); 
} 

我也试过:

public static <T> void WriteLine(T Array[]) { 
    for (int I = 0; I < Array.length; ++I) { 
     Out.println(Array[I]); 
    } 
} 

,并在我的主,我做的:

int[] I = new int[]{1, 2, 3, 4, 5}; 
WriteLine(I); 

我也试过:

WriteLine<int[]>(I); 

不工作..

它打印: [I @ 2f56f920

又名int数组的地址。我如何显式调用特定的数组函数,或者如何让编译器知道哪一个自动调用(隐式地)?

我不习惯的Java /泛型/对象尚未..只要从C++移动,并用于模板:(

+0

不,我希望它打印任何类型的数组。 – Brandon 2013-02-08 19:46:20

+0

可怕的风格。我作为循环的索引是什么?直到最近你写了FORTRAN吗?了解Sun Java编码风格标准。 – duffymo 2013-02-08 19:48:26

+2

找出解决方法后,开始遵循Java命名约定。 – adarshr 2013-02-08 19:48:35

回答

5

int不是Object这样的int[]不是Object[]

Integer[] I = new Integer[]{1, 2, 3, 4, 5}; 
WriteLine(I); 

或者你应该已经超载了所有基本数据类型WriteLine

public static void WriteLine(int Array[]) { 
... 
public static void WriteLine(long Array[]) { 
... 
+0

Ahh ..盒装类型。我会改为重载所有基元类型。感谢您花时间回复。我会接受这个答案。我认为有一种方法可以明确调用特定的过载。 – Brandon 2013-02-08 19:55:40

+2

这就是为什么有9个'java.util.Arrays.toString'方法。 – jdb 2013-02-08 19:59:12

1

我会说出比其他的东西阵“阵”,如Java与对象或T泛型类混淆了Array类。如果您只想打印数组的每个元素,您可能还想考虑使用StringBuilder。

public static void write(Object arr[]) { 
    for (int i = 0; i < arr.length; ++i) { 
     System.out.println(arr[i]); 
    } 
} 

应该足够好。

如果你真的想使用StringBuilder,然后打印,这样做:

public static void write(Object arr[]) { 
    sb = new StringBuilder(); 
    for (int i = 0; i < arr.length; ++i) { 
     sb.append(arr[i] + " "); 
    } 
    System.out.println(sb.toString()); 
} 
+0

我会把它命名为别的东西,但这不是问题。 '数组'甚至可能不被导入,但是不会混淆编译器。例如:http://ideone.com/sFgpo7 – 2013-02-09 02:31:34

1

阵列的原始的java.lang.Object中的亚型。重载在编译时解决,选择最具体的方法是writeLine(Object text)。

0

你有两个选择,以确保正确的函数被调用:

1-

Object[] objArray = new Object[] { 1, 2, 3, 4, 5 }; 

2-

Integer[] integerArray = new Integer[] { 1, 2, 3, 4, 5 }; 

在一个侧面说明,你应该遵循Java naming conventions。例如方法名称应该是writeLine,循环中的索引变量应该是small case

+0

嗯..为什么是小案例?我会这样做,但我不知道为什么小型案例对于Java来说非常重要?我正在阅读上面的协议手册,将我链接到atm。你似乎有很多像你一样的小案例。只是为了风格? – Brandon 2013-02-08 19:57:31

+1

遵循语言命名约定,可以让其他程序员更易读,否则它可能看起来很奇怪,很烦人。每种语言都有一个不同的命名约定,例如“WriteLine”适用于像“C#”这样的语言,但它应该是Java中的“writeLine”。 – iTech 2013-02-08 19:59:54