Редактировать: с тех пор было разрешено. Спасибо всем, кто помог. Вызов метода после извлечения объекта в качестве правильного класса оболочки. Но String.valueOf() намного, гораздо проще добиться того же эффекта.Динамическое литье в примитивы в Java
Hello--
То, что я пытаюсь сделать, не может быть даже возможно. Я потратил несколько часов на то, чтобы исследовать и экспериментировать с различными вещами, поэтому я решил, что, наконец, попрошу, чтобы узнать, знает ли кто-нибудь, возможно ли это.
Возможно ли, используя отражение, динамически лить оболочку для примитива неизвестного типа в качестве примитива?
Я в основном пытаюсь создать общую функцию toString, которая может обрабатывать преобразование любого типа примитива в строку. Такое, казалось бы, простое дело сложно (и я знаю, что могу просто проверить каждый тип, чтобы увидеть, является ли он типом Wrapper.class и конкретно его отличает, но на данный момент я просто преследую это из упрямства).
Следующие вызовы исключают ClassCastException. Класс primClass кажется правильным (дает «int» при печати primClass.getName()).
private String toString(Number obj){
String result = "";
try{
Class objClass = obj.getClass();
Field field = objClass.getDeclaredField("TYPE");
Class primClass = (Class)field.get(obj);
Method method = objClass.getMethod("toString", new Class[]{primClass});
Object args = new Object[]{primClass.cast(obj)};
result = (String)method.invoke(null, args);
}catch(Exception ex){
//Unknown exception. Send to handler.
handleException(ex);
}
return result;
}
Так что я немного в растерянности. У кого-нибудь есть идеи? Любая помощь будет принята с благодарностью.
'toString' методы в' Double, Long, ... 'не делают то, что вы хотите? – khachik