如何将参数的 class 传递给另一个方法调用?

How can I pass the class of my parameter to another method call?

我正在创建一个调用 JAXRSClientFactory 的方法,如下所示。

public T create(Class<T> resourceType) throws Exception {
    Class<T> resource = JAXRSClientFactory.create(basePath, resourceType.getClass(), username, password, null);
    // do common configuration for any interface T
    Client client = WebClient.client(resource);
    WebClient webClient = WebClient.fromClient(client);
    SSLUtil.configure(webClient);
    return resource.newInstance();
}

但是,这并没有像我预期的那样工作,因为 resourceType.getClass() returns java.lang.Class 而不是 T 的 class。

将对 JAXRSClientFactory 的调用更改为使用 resourceType 会导致以下不兼容类型错误:

如何修改此方法,以便将 T 的 class 传递给 JAXRSClientFactory.create()

resourceType.getClass() 总是 return 一个 Class<Class> 结果,而不是 <Class<T>.

既然您已经将 Class<T> 作为参数,那么您可能应该这样做:

T resource = JAXRSClientFactory.create(basePath, resourceType, username, password, null);

您似乎认为参数 Class<T> resourceType 是 T 的一个实例。这是错误的。

Class<T> resourceType 的参数定义 不是 resourceType 定义为 T 的实例,而是 class T 的(即 Class 的实例 T.class)。

因此,因为resourceType是class的实例,调用resourceType.getClass()returnsClass.class.

如果您希望参数是 T 的一个实例,您需要方法签名为:

public T create(T resourceType)

但实际上,我怀疑您可能确实想要 Class,而不是实例,因此您应该将对 JAXRSClientFactory.create 的调用更改为:

T resource = JAXRSClientFactory.create(basePath, resourceType, username, password, null);

看看JAXRSClientFactory#create(String, Class, String, String, String):

Parameters:

baseAddress - baseAddress
cls - proxy class, if not interface then a CGLIB proxy will be created
username - username
password - password
configLocation - classpath location of the configuration resource

Returns:

typed proxy

您修改后的代码:

public T create(Class<T> resourceType) throws Exception {
    T resource = JAXRSClientFactory.create(basePath, resourceType, username, password, null);
    Client client = WebClient.client(resource);
    WebClient webClient = WebClient.fromClient(client);
    SSLUtil.configure(webClient);
    return resource;
}