Правильное использование разрешимого типа Spring для определения универсального типа

#spring #generics #types

#spring #общие #типы

Вопрос:

Я пытаюсь использовать Spring org.springframework.core.ResolvableType для определения параметризованного типа во время выполнения как такового:

 public class MyClass<T> implements MyInterface<T> {
    private final Class<T> typeClass;

    public CustomStateSerializer() {
        ResolvableType type = ResolvableType.forClass(getClass());
        ResolvableType genericType = type.getGeneric();
        this.typeClass= (Class<T>) genericType.resolve();
    }
}

...

new MyClass<MyType>();
  

К сожалению, genericType приводит к ? . Очевидно, что я неправильно его использую, и, похоже, я не могу найти хороших документов для решения.

Ответ №1:

Класс имеет только ссылку, на которую еще не определено. Таким образом, вы можете передать экземпляр, который уже будет иметь определенный:

     ResolvableType type = ResolvableType.forClass(getClass(), this);
    this.typeClass = type.getGeneric(0).resolve();
  

Комментарии:

1. Такого метода не существует ResolvableType::forClass .

2. Он находится в репозитории Spring: github.com/spring-projects/spring-framework/blob /…

3. Оба ResolvableType::forClass требования Class<?> в качестве своих параметров. Нет такого метода, который принимал бы класс и T экземпляр ( this ).