对象...对象[]和格式

时间:2019-03-13 13:28:57

标签: java arrays parameters java-8

我有不同类型的数据(可能是String,Integer ...)。 这是一个简单的示例:

public static void main(String[] args) {
    before("one");
}

public static void before(Object... datas ) {
    go(1, datas);
}

public static void go(Object...params ) {
    System.out.println(MessageFormat.format("{0} is the same as {1}", params));
}

我想要这个:"1 is the same as one"但得到了这个"1 is the same as [Ljava.lang.Object;@4554617c"

问题似乎出在我的参数中,我想要一个像这样的数组[1,“ one”],但是“ one”封装在数组中。我想要“平整”一些东西。有什么想法吗?

谢谢

2 个答案:

答案 0 :(得分:1)

您传递给go的内容实际上是1,并且包含“ one”的数组,这就是为什么得到[Ljava.lang.Object;@4554617c"的原因。您可以将方法更改为:

public static void before(Object... datas) {
    Object[] arr = Stream.concat(Stream.of(1), Arrays.stream(datas))
                         .toArray();
    go(arr);
}

答案 1 :(得分:0)

在您的示例中,格式化的消息始终包含2个参数,因此您可以按如下所示进行简化:

public static void main(String[] args) {
    before("one");
}

public static void go(Object...params) {
    System.out.println(MessageFormat.format("{0} is the same as {1}", params));
}

public static void before(Object data) {
    go(1, data);
}