Как Spring может во время выполнения получать информацию об универсальном типе в отношении «коллекции со строгим типом»?

Я прочитал ниже в документе Spring 3.0:

Строго типизированная коллекция (только Java 5+)

В Java 5 и более поздних версиях вы можете коллекции (с использованием универсальных типов). То есть можно объявить тип Collection так, чтобы он мог содержать только элементы String (например). Если вы используете Spring для внедрения зависимостей строго типизированной коллекции в bean-компонент, вы можете воспользоваться поддержкой преобразования типов Spring, чтобы элементы ваших экземпляров строго типизированной коллекции были преобразованы в соответствующий тип перед добавлением в Коллекция.

public class Foo {

  private Map<String, Float> accounts;

  public void setAccounts(Map<String, Float> accounts) {
      this.accounts = accounts;
  }
}

<beans>
  <bean id="foo" class="x.y.Foo">
      <property name="accounts">
          <map>
              <entry key="one" value="9.99"/>
              <entry key="two" value="2.75"/>
              <entry key="six" value="3.99"/>
          </map>
      </property>
  </bean>
</beans>

Когда свойство Accounts bean-компонента foo подготовлено для внедрения, информация о дженериках о типе элемента строго типизированной карты доступна посредством отражения. Таким образом, инфраструктура преобразования типов Spring распознает различные элементы значений как имеющие тип Float, а строковые значения 9.99, 2.75 и 3.99 преобразуются в действительный тип Float.

Как это возможно? Насколько я знаю, информация об универсальном типе стирается во время компиляции.

0
задан Tomasz Nurkiewicz 10 March 2012 в 22:37
поделиться