Java: передача класса в качестве аргумента для TypeReference - PullRequest
1 голос
/ 27 мая 2020

Я использую следующий код для создания карты, где ключ - «String», а значение имеет тип «SomeClass». Как передать SomeClass в качестве аргумента, чтобы я мог повторно использовать функцию с несколькими классами?

public Map<String, SomeClass> getMap(String mappingFilePath) throws IOException {
    Resource mappingResource = resourceLoader.getResource(mappingFilePath);
    return objectMapper.readValue(
        mappingResource.getInputStream(), new TypeReference<Map<String, SomeClass>>() {});
  }

Например:

Map<String, Integer> tempMap = getMap(someFilePath, Integer)
// or
Map<String, SomeClass> tempMap = getMap(someFilePath, SomeClass)

Дополнительный вопрос :

Можем ли мы передать Map в качестве аргумента? Так что в некоторых случаях мы можем сделать его LinkedHashMap при необходимости.

Map<String, Integer> tempMap = getMap(someFilePath, Map<String, Integer>)
// or
Map<String, SomeClass> tempMap = getMap(someFilePath, LinkedHashMap<String, SomeClass>)

1 Ответ

1 голос
/ 27 мая 2020

TypeReference уже является общим c классом, поэтому вы можете взять его в качестве второго аргумента и вернуть этот тип объекта

public <T> T getMap(String mappingFilePath, TypeReference<T> typeReference) throws IOException {
Resource mappingResource = resourceLoader.getResource(mappingFilePath);
return objectMapper.readValue(
    mappingResource.getInputStream(), typeReference);
}

Затем вы можете использовать его для любого типа

Map<String, Integer> tempMap = getMap(someFilePath, new TypeReference<Map<String, Integer>>() {})
// or
Map<String, SomeClass> tempMap = getMap(someFilePath, new TypeReference<Map<String, SomeClass>>() {})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...