Получить имя класса с общей информацией - PullRequest
3 голосов
/ 13 апреля 2010

В проблеме сериализации Java я хочу сохранить имя некоторых классов, и у меня есть некоторые проблемы с общими классами. Например:
- Если у меня есть ArrayList<String> listToDump = new ArrayList<String>();
- Если я возьму имя: listToDump.getName(); или listToDump.getCanonicalName();
- у меня будет java.util.ArrayList или ArrayList
- И я хочу иметь java.util.ArrayList<String> или ArrayList<String>

Есть идеи, как мне это сделать?
Дэмиен.

Ответы [ 5 ]

6 голосов
/ 13 апреля 2010
  1. Случай, который вы описали, не может работать, вы, вероятно, делаете listToDump.getClass().getName()

  2. Нет способа получить информацию об универсальном типе во время выполнения из-за стирания типа :

    Когда создается универсальный тип, компилятор переводит эти типы Техника называется стирание типа - процесс, при котором компилятор удаляет все информация, связанная с параметрами типа и введите аргументы в классе или способ.

  3. Если вы подробно опишите, какую проблему вы пытаетесь решить, возможно, мы предложим вам некоторые обходные пути или даже решения. Стирание типа не должно быть большой проблемой, оно просто может изменить способ выполнения некоторых действий.

3 голосов
/ 13 апреля 2010

Если listToDump - это поле, вы можете использовать Field.getGenericType () . Но дженерики Java стираются во время выполнения - это просто простой экземпляр ArrayList. Вы можете посмотреть на его содержимое и найти общий супертип, но он становится очень сложным, когда задействованы интерфейсы, и может быть более конкретным, чем вы хотите.

Но как вы планируете использовать информацию?

2 голосов
/ 13 апреля 2010

Это невозможно из-за стирания типа .

1 голос
/ 15 января 2012

Я думаю, что если вы извлечете какой-либо элемент из List, попробуйте выбрать его имя класса, вы получите результат, который вы ищете.

1 голос
/ 13 апреля 2010

Переключиться на язык, который его поддерживает.

Поведение, которое вы описываете, называется стиранием типов, и именно так в Java реализованы обобщения

...