В проблеме сериализации Java я хочу сохранить имя некоторых классов, и у меня есть некоторые проблемы с общими классами. Например: - Если у меня есть ArrayList<String> listToDump = new ArrayList<String>(); - Если я возьму имя: listToDump.getName(); или listToDump.getCanonicalName(); - у меня будет java.util.ArrayList или ArrayList - И я хочу иметь java.util.ArrayList<String> или ArrayList<String>
ArrayList<String> listToDump = new ArrayList<String>();
listToDump.getName();
listToDump.getCanonicalName();
java.util.ArrayList
ArrayList
java.util.ArrayList<String>
ArrayList<String>
Есть идеи, как мне это сделать? Дэмиен.
Случай, который вы описали, не может работать, вы, вероятно, делаете listToDump.getClass().getName()
listToDump.getClass().getName()
Нет способа получить информацию об универсальном типе во время выполнения из-за стирания типа :
Когда создается универсальный тип, компилятор переводит эти типы Техника называется стирание типа - процесс, при котором компилятор удаляет все информация, связанная с параметрами типа и введите аргументы в классе или способ.
Если вы подробно опишите, какую проблему вы пытаетесь решить, возможно, мы предложим вам некоторые обходные пути или даже решения. Стирание типа не должно быть большой проблемой, оно просто может изменить способ выполнения некоторых действий.
Если listToDump - это поле, вы можете использовать Field.getGenericType () . Но дженерики Java стираются во время выполнения - это просто простой экземпляр ArrayList. Вы можете посмотреть на его содержимое и найти общий супертип, но он становится очень сложным, когда задействованы интерфейсы, и может быть более конкретным, чем вы хотите.
listToDump
Но как вы планируете использовать информацию?
Это невозможно из-за стирания типа .
Я думаю, что если вы извлечете какой-либо элемент из List, попробуйте выбрать его имя класса, вы получите результат, который вы ищете.
List
Переключиться на язык, который его поддерживает.
Поведение, которое вы описываете, называется стиранием типов, и именно так в Java реализованы обобщения