У меня есть логгер, который принимает на вход объект, и мне это очень удобно. Но теперь мне нужно зарегистрировать ввод типа int[]
. Я хочу изменить метод, чтобы он правильно регистрировал любой массив или Iterable.
В C # я бы сделал следующее:
int[]data=new int[10];
object tmp=data;
.....
if (tmp is IEnumerable)
{
StringBuilder _tmp = new StringBuilder();
foreach (var i in (IEnumerable)tmp)
{
if (_tmp.Length > 0)
{
_tmp.Append(",");
}
_tmp.Append(i);
}
var r = _tmp.ToString();
}
Я пробовал проверять int[]
на Iterable
(это не так), затем я пробовал проверять с помощью tmp.getClass().isArray()
, который работает, но теперь у меня проблемы с перечислением членов этого массива. Мне нужен метод, который будет работать с любым массивом или списком объектов.
Как мне правильно это сделать на Java?
2 ответа
Вы можете использовать методы в java.lang.reflect.Array
нравится
Object obj = new int[] { 1, 2, 3, 4 };
try {
int len = Array.getLength(obj);
for (int i = 0; i < len; i++) {
if (i != 0) {
System.out.print(", ");
}
System.out.print(Array.get(obj, i));
}
System.out.println();
} catch (IllegalArgumentException iae) {
iae.printStackTrace();
}
Выход
1, 2, 3, 4
Вероятно, нет чистого способа сделать это в Java (*). Думаю, это сработает:
Object tmp = ...;
String s;
if (tmp instanceof boolean[]) {
s = Arrays.toString((boolean[]) tmp);
}
else if (tmp instanceof byte[]) {
s = Arrays.toString((byte[]) tmp);
}
else ...
И сделайте то же самое для char[]
, double[]
, float[]
, int[]
, long[]
, short[]
; если isArray()
равно true
и это не один из вышеперечисленных случаев,
s = Arrays.toString((Object[]) tmp);
ИЗМЕНИТЬ: Я проверил это, и он работает.
См. этот javadoc для получения списка доступных Arrays.toString
методы.
(*) Хорошо, использование Array.get
, как в другом ответе, вероятно, более чистый подход. Я это тестировал, и он тоже работает.
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.
tmp.getClass().getComponentType()
Log(Object... arguments)
, и я нахожу его очень удобным в использовании