繁体   English   中英

Java:将 class 作为 TypeReference 的参数传递

[英]Java: Passing class as an argument for TypeReference

我正在使用以下代码创建一个 map,其中键是“String”,值是“SomeClass”类型。 如何将 SomeClass 作为参数传递,以便可以在多个类中重用 function?

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>)

TypeReference已经是一个通用的 class,因此您可以将其作为第二个参数并返回该类型的 object

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>>() {})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM