Объект... Объект[] и форматирование

У меня есть разные типы данных (это может быть 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, «один»], но вместо этого «один» инкапсулируется внутри массива. Хотелось бы чего-нибудь "плоского". Есть идеи ?

Спасибо

вы должны изменить параметры метода before. вот так: before(1,"one"); тогда будет работать корректно

Hadi J 13.03.2019 14:58

да, я передаю в go() массив: array[0]=1 (целое число) et array[1]=вложенный массив (содержащий значение «один»). В основном я хочу сгладить это, чтобы получить один массив, объединяющий значения из вложенного массива. Не знаю, понимаю ли я себя. Что бы я хотел: массив [0] = 1 и массив [1] = "один"

AntonBoarf 13.03.2019 15:01
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
43
2

Ответы 2

то, что вы передаете go, на самом деле 1 и массив, содержащий «один», поэтому вы получаете это [Ljava.lang.Object;@4554617c". Вы можете изменить свой метод на:

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

@AntonBoarf, каков ваш ожидаемый результат?

Eugene 13.03.2019 14:43

[1, [Ljava.lang.Object;@7852e922] совпадает с {1}

AntonBoarf 13.03.2019 14:44

Спасибо, это работает. Думал об использовании метода flatMap()

AntonBoarf 13.03.2019 15:11

из вашего примера отформатированное сообщение всегда содержит 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);
}

Другие вопросы по теме