如何将参数的 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;
}
我正在创建一个调用 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 resourceReturns:
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;
}