Отражение Java: как получить класс универсального типа метода? - PullRequest
1 голос
/ 11 апреля 2019

Я пытаюсь закодировать универсальный метод, который в качестве входных данных дает только Type, чтобы получить доступ к соответствующему классу. Обратите внимание, что в метод не передается никакой параметр (как уже отвечено здесь ), а указан только тип.

Вот соответствующий код:

@Bean
public <T> ConsumerFactory <String, T> consumerFactory() {
 Class <T> genericClass = null; //How to get the class corresponding to type T ? 

 return new DefaultKafkaConsumerFactory<>(consumerConfigs(),
  new StringDeserializer(),
  new JsonDeserializer<>(genericClass, objectMapper)
 );
}

1 Ответ

2 голосов
/ 11 апреля 2019

Вам, вероятно, следует ввести токен типа в качестве параметра метода.Вы не сможете получить T информацию, так как она стерта во время компиляции.

@Bean
public ConsumerFactory<String, String> newStringConsumerFactory() {
  return newConsumerFactory(String.class);
}

private <T> ConsumerFactory <String, T> newConsumerFactory(Class<T> t) {
 return new DefaultKafkaConsumerFactory<>(consumerConfigs(),
  new StringDeserializer(),
  new JsonDeserializer<>(t, objectMapper)
 );
}

Вы можете попробовать копаться в отражении и Method.getGenericParameterTypes(), но это не делает @Configuration читабельно.Подробность и соблюдение стандартов здесь важны, так как большинство IDE поддерживают конфигурацию Spring и автоматические подсказки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...