在Java中调用重载函数?

时间:2013-02-08 19:43:45

标签: java generics implicit explicit

如何在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 Array的地址。如何显式调用特定的数组函数或如何让编译器知道自动调用哪一个(隐式)?

我还不熟悉Java / Generics / Object ..刚刚从C ++迁移到模板:(

5 个答案:

答案 0 :(得分: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[]) {
...

答案 1 :(得分:1)

我会去

System.out.println(Arrays.toString(myArray));

答案 2 :(得分:1)

我将您的数组命名为“Array”之外的其他内容,因为Java将Array类与Object或T泛型类混淆。如果你想要的只是打印数组的每个元素,你可能还想考虑使用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());
}

答案 3 :(得分:1)

原语数组是java.lang.Object的子类型。在编译时解决重载并选择最具体的方法,以防万一为writeLine(对象文本)。

答案 4 :(得分: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