gpt4 book ai didi

java - 获取 T 类的泛型类型到 new GenericType>() Java 中的 T

转载 作者:行者123 更新时间:2023-12-02 11:16:41 24 4
gpt4 key购买 nike

我已经实现了以下类,并使用 REST 调用实现了一个搜索方法,获取给定类型 T 的对象列表。

    public class AmapiService<T extends Resource> implements RestService<T> {


@Override
public List<T> search( MultivaluedMap<String, String> aQueryParams ) {
MultivaluedMap<String, String> lQueryParams = aQueryParams;
Client lClient = buildClient();

WebTarget ltarget = lClient.target( iRestDriver.target( aApiUrl ).getUri() );

for ( String lKey : lQueryParams.keySet() ) {
ltarget = ltarget.queryParam( lKey, lQueryParams.getFirst( lKey ) );
}

List<T> lObjects = null;

lObjects = ltarget.request( MediaType.APPLICATION_JSON ).get( new GenericType<List<T>>() {
} );

return lObjects;
}
}

这就是为类和搜索方法调用创建实例的方式。

AmapiService<RFQDefinition> RFQService =
new AmapiService<RFQDefinition>();

List<RFQDefinition> qfq = RFQService.search( lQueryParam );

当我运行这个时,我收到以下错误

May 07, 2018 1:48:14 PM org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor aroundReadFrom
SEVERE: MessageBodyReader not found for media type=application/json, type=interface java.util.List, genericType=java.util.List<T>.

这意味着 RFQDefinition 未设置为 new GenericType<List<T>>(). 中的 T

如何设置 AmapiService<T extends Resource> 中 T 的类型至new GenericType<List<T>>()

如果我定义它new GenericType<List<RFQDefinition>>()而不是 T 它的工作

最佳答案

您对泛型的使用实际上在这里没有任何作用。

没有真正的通用实现,因为您的响应基于您为所使用的服务提供的参数 ( .get( new GenericType<List<T>>(){}) )。类型参数对此没有帮助,因为代码是由 jax-rs 实现调用的,而它不经过静态链接。

换句话说,没有代码将使用以下参数针对您的类/方法进行编译和运行:

//this is not a valid use-case:
List<ActualType> res = search(aQueryParams);

对此的简单翻译可以是:Java 泛型不会进入 REST API。您必须静态使用 API 应该返回的模型的 Java 类型(就像使用 new GenericType<List<RFQDefinition>>() 一样)。

关于java - 获取 T 类的泛型类型到 new GenericType<List<T>>() Java 中的 T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50219955/

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