Хороший вопрос. Мне тоже было интересно вчера вечером;)
Таким образом, ответ заключается в том, что существует 2 различных типа полиморфизма: полиморфизм во время компиляции и во время выполнения.
Когда вы используете метод супертипа и переопределяете методы sybtypes, это полиморфизм во время выполнения.
Когда вы используете супертипы и подтипы в качестве параметров для различных перегруженных методов, это полиморфизм во время компиляции.
Таким образом, компилятор, в вашем случае, должен знать во время компиляции, какой метод (/ overload) выполнить, он не примет это решение во время выполнения.
Если бы у вас был Контроль над классом поля, то решением было бы использовать обобщенные значения, чтобы вы определили
class Field<T>
по методу
T get( Object o )
Тогда компилятор сможет знать, во время компиляции, какой метод использовать для отображения, как он будет знать, во время компиляции, какой тип возвращается field.get.
Но, согласно вашим комментариям, вы используете класс JDK java.lang.reflect.Field и, следовательно, не можете управлять им, чтобы сделать его универсальным. В этом случае, да, единственным решением является использование метода отображения, который обрабатывает все возможные типы для field.get. Но действительно, метод String.valueOf может сильно помочь в этом, поскольку он предоставляет строковое представление любого типа в Java, уже выполняя искомую работу по перегрузке.
Источник здесь .
С уважением,
Stéphane