我有不同类型的数据(可能是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”封装在数组中。我想要“平整”一些东西。有什么想法吗?
谢谢
答案 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);
}