Полиморфизм Java и понижающее преобразование

Я играю с API отражения Java и пишу методы, которые проверяют данный объект и описывают его поля, методы и т. Д.

Я использую метод getFields () для перебора различных атрибутов и отображения содержимого объекта:

public static void display(Integer i)
{
    System.out.println("An integer: " + i);
}

// Basically a method for each primitive type wrapper

public static void display(Object o)
{
    for (Field f : c.getFields())
    {
        System.out.println("A " + o.getClass() + " which is composed of:");
        display(f.get(o));
    }
}

(Другие примитивные типы и массивы опущены для простоты.)

Eventhough Метод поля get возвращает значение Объект , я думал, что правильные методы будут вызываться для оболочек примитивных типов (целые числа, строки и т. Д.), Но на самом деле вызывается только display (Object o) (неявно выполняется понижающее преобразование).

На данный момент я нашел единственное решение, которое я нашел, - это жестко приглушить объекты, если это возможно, например:

public static void display(Object o)
{
    if (o instanceof Integer)
    {
        display((Integer) o);
        return;
    }
    else if (o instanceof String 
    {
        ... 
    } // And so on

    for (Field f : c.getFields())
    {
        System.out.println("A " + o.getClass() + " which is composed of:");
        display(f.get(o));
    }
}

Это, однако, кажется уродливым, и мне было интересно, есть ли более элегантный способ сделать убедитесь, что вызывается правильный метод. Есть идеи?

Заранее спасибо, добрые люди из StackOverflow!

6
задан executifs 13 June 2011 в 17:36
поделиться