Тип данных Renderers в Intellij?

Недавнее преобразование в Intellij. Eclipse имеет функцию в отладчике, "Примитивные параметры отображения", которая имеет примитивы рендеринга отладчика в значениях hex и ascii.

Eclipse Debugger

Поскольку в Intellij все было очень легко, я подумал, что это было бы неинтересно, но через час и ряд неработающих типов данных появится позже, я нахожусь готовым к ползучести назад к затмению. Я сделал несколько обработчиков, которые работали, но только для объектов, поэтому я могу только заключить, что рендереры, похоже, не работают для примитивов. Может ли кто-нибудь указать мне в правильном направлении здесь?

Изменить: я видел вариант выбора hex в рендеринге по умолчанию, но я надеюсь на что-то большее, чем на решение, для которого требуется 2 клика для каждой переменной.

Ответ 1

Для интегральных значений (то есть ни значений с плавающей запятой, ни логических значений) вы можете просмотреть их как шестнадцатеричное значение, щелкнув правой кнопкой мыши на примитиве в отладчике и выбрав "View As" → "Hex".

enter image description here

По умолчанию функция Data Type Renderer работает только с объектами, и единственным реалистичным способом представления примитива является либо его интегральное значение, либо шестнадцатеричный, поэтому я считаю, что это счастливый компромисс.

Ответ 2

Мое решение состояло в том, чтобы предоставить персонализированный визуализатор типов данных, используя следующее выражение для byte[]: new String(Hex.encode(this));.

Это работает по умолчанию, пока включен режим рендеринга типов данных (поддерживается состояние перезапуска приложений и т.д.). Вы можете добавить более сложное форматирование строк, если хотите (обычно у меня есть класс утилиты, который делает дальнейшее форматирование, и я просто вызываю его из поля выражения DTR).

Data Type Renderer

Debugger view

Ответ 3

Я сделал несколько обработчиков, которые работали, но только для объектов, поэтому я могу только вывод, что рендереры, похоже, не работают на примитивы.

С IDEA 2016.3 наконец можно определить пользовательские типы данных Java Data Type Renderers для примитивных типов (включая массивы).

https://www.jetbrains.com/idea/whatsnew/#v2016-3

Ответ 4

Это похоже на решение Andy, но не требует определения класса Hex (о котором он даже не упоминает). Работает только для проектов Java8 (то есть не для Android в настоящее время).

Вы должны предоставить персонализированный визуализатор типов данных, используя следующее выражение для byte[] (см. Andy answer):

IntStream.range(0,Math.min((this.length+3)/4,20)).mapToObj(i->IntStream.range(i*4,Math.min(i*4+4,_this.length)).mapToObj(i1->String.format("%02x",_this[i1])).collect(Collectors.joining())).collect(Collectors.joining(" "))+(this.length>80?"...":"")

Он будет форматировать данные так, чтобы "01020304 05060708 09", т.е. сгруппированы по четырем и разделены пробелами. Отображаются только первые 80 байт, добавляется многоточие, если их больше.

Ответ 5

Вы можете навсегда изменить все примитивы для отображения в шестнадцатеричном виде в опциях "Настроить параметры представления данных" в проводнике переменных (есть флажок для него) введите описание изображения здесь