Довольно массив объектов печати, а не массив объектов? - PullRequest
4 голосов
/ 01 июля 2010

Итак, я уже обнаружил

Arrays.toString(arr);

Так что не указывайте мне этот вопрос .

Моя проблема немного другая.В этом случае у меня нет собственного указателя массива на рассматриваемый массив.У меня есть это как указатель объекта, и это может быть массив любого типа (примитивный или другой).В этом случае я могу использовать вышеупомянутый метод toString (), приведя указатель Object к Object [].Однако, если указатель является примитивным массивом, он выдаст исключение времени выполнения и произойдет сбой.Итак?

Пример:

double test[] = {1, 2, 3, 4};
Object t = test;
// Now how do I pretty print t as an array with no access to test?

Я решил свою проблему следующим образом:

public String unkObjectToString(Object o) {
    if(!o.getClass().isArray()) return o.toString();
    int len = Array.getLength(o);
    String ret = "[";
    for(int i = 0; i < len; i++) {
        Object q = Array.get(o, i);
        ret += unkObjectToString(q);
        if(i == len - 1)
            ret += "]";
        else
            ret += ", ";
    }
    return ret;
}

Ответы [ 2 ]

2 голосов
/ 01 июля 2010

ArrayUtils.toString(arrayObj) ( commons-lang ) - делает именно то, что вам нужно (также обрабатывает многомерные массивы). Просто скачайте флягу commons-lang и добавьте ее в свой путь к классам.

2 голосов
/ 01 июля 2010

Вы должны протестировать и разыграть.

if (o instanceof byte[]) {
      return Arrays.toString((byte[]) o);
} //etc.

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

...