gpt4 book ai didi

java - 当泛型类型信息不可用时,如何避免编译器警告?

转载 作者:搜寻专家 更新时间:2023-10-31 20:22:47 25 4
gpt4 key购买 nike

我正在使用 Spring 的 RestTemplate 来调用 REST 网络服务。其中一个调用是返回特定类型的对象列表。 RestTemplate 方法要求提供类参数以指示预期的返回类型。

// restTemplate is type org.springframework.web.client.RestTemplate
URI restServiceURI = new URI("http://example.com/foo")
restTemplate.getForObject(restServiceURI, List<Foo>.class);

显然,这无法编译。当您提供这样的类型参数时,您无法获得静态 .class 属性。当我删除类型参数时,代码会编译,但会生成 rawtypes 编译器警告。

我的问题很简单。我是坚持抑制编译器警告,还是有更简洁的编码方式?

最佳答案

但是 RestTemplate 如何知道将列表元素转换为类 Foo 的实例?您是否尝试过运行代码,它是否按预期运行?

我能想到的解决这个问题的一种方法是使用数组作为输入类型。例如。

restTemplate.getForObject(restServiceURI, Foo[].class);

但我不知道是否支持。如果您确实需要反序列化更复杂的数据类型,那么您应该考虑使用 Jackson 或 Gson。

对于 Jackson,您可以使用 ObjectMapper类以轻松反序列化来自大多数来源的数据。

String input = ...;
ObjectMapper mapper = new ObjectMapper();
List<Foo> list = mapper.readValue(input, new TypeReference<List<Foo>>(){});

上面的方法之所以有效,是因为您有意创建了一个扩展 TypeReference 的匿名类,该类将在运行时记住其泛型类型,因此它可以帮助对象映射器创建 Foo 列表。 For a fuller explanation .

关于java - 当泛型类型信息不可用时,如何避免编译器警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8509060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com