我正在创建一个方法,可以调用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()
会返回java.lang.Class
而不是T
的类。
将呼叫更改为JAXRSClientFactory
以使用resourceType
会导致以下不兼容类型错误:
如何修改此方法以便我可以将T
的类传递给JAXRSClientFactory.create()
?
答案 0 :(得分:3)
查看JAXRSClientFactory#create(String, Class, String, String, String):
<强>参数:强>
cls
- baseAddress
username
- 代理类,如果不是接口,则将创建CGLIB代理password
- 用户名
configLocation
- 密码
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; }
- 配置资源的类路径位置<强>返回:强>
键入代理
您修改过的代码:
<temp>
<Movies>
<Title>Man Of Steel</Title>
<Title>Kung Fu Panda</Title>
<Title>Thor</Title>
</Movies>
<Cars>
<Title>Racing</Title>
<Title>Vintage</Title>
<Title>Luxary</Title>
</Cars>
</temp>
答案 1 :(得分:1)
resourceType.getClass()
将始终返回Class<Class>
结果,而不是<Class<T>
。
由于您已经将Class<T>
作为参数,因此您应该这样做:
T resource = JAXRSClientFactory.create(basePath, resourceType, username, password, null);
答案 2 :(得分:1)
您似乎认为参数void MainWindow::openSerialPort()
{
SettingsDialog::Settings p = settings->settings();
serial->setPortName(p.name);
serial->setBaudRate(p.baudRate);
serial->setDataBits(p.dataBits);
serial->setParity(p.parity);
serial->setStopBits(p.stopBits);
serial->setFlowControl(p.flowControl);
if (serial->open(QIODevice::ReadWrite)) {
console->setEnabled(true);
console->setLocalEchoEnabled(p.localEchoEnabled);
ui->actionConnect->setEnabled(false);
ui->actionDisconnect->setEnabled(true);
ui->actionConfigure->setEnabled(false);
showStatusMessage(tr("Connected to %1 : %2, %3, %4, %5, %6")
.arg(p.name).arg(p.stringBaudRate).arg(p.stringDataBits)
.arg(p.stringParity).arg(p.stringStopBits).arg(p.stringFlowControl));
} else {
QMessageBox::critical(this, tr("Error"), serial->errorString());
showStatusMessage(tr("Open error"));
}
}
void MainWindow::readData()
{
QByteArray data = serial->readAll();
console->putData(data);
}
是T的实例。这是错误的。
Class<T> resourceType
的参数定义不将Class<T> resourceType
定义为resourceType
的实例,但作为T
的类(即, T
的{{1}}实例。
因此,由于Class
是类的实例,因此调用T.class
会返回resourceType
。
如果您希望参数是T的实例,则需要方法签名为:
resourceType.getClass()
但实际上,我怀疑你可能确实想要Class而不是实例,因此你应该将对Class.class
的调用更改为:
public T create(T resourceType)