我希望在 java 中创建一个模仿以下 C# 方法的功能的通用帮助器方法。
private T Execute<T>(Request request) where T : Response, new()
{
.... Code
}
上面的方法在以下情况下被调用
public AddLogicalDeviceResponse AddLogicalDevice(AddLogicalDeviceRequest request)
{
return Execute<AddLogicalDeviceResponse>(request);
}
public GetConfigurationResponse GetConfiguration(GetConfigurationRequest request)
{
return Execute<GetConfigurationResponse>(request);
}
public GetDeviceDefinitionsResponse GetDeviceDefinitions(GetDeviceDefinitionsRequest request)
{
return Execute<GetDeviceDefinitionsResponse>(request);
}
public RemoveLogicalDeviceResponse RemoveLogicalDevice(RemoveLogicalDeviceRequest request)
{
return Execute<RemoveLogicalDeviceResponse>(request);
}
public GetEPCListCommandResponse GetEPCListCommand(GetEPCListCommandRequest request)
{
return Execute<GetEPCListCommandResponse>(request);
}
public DeviceSpecificCommandResponse DeviceSpecificCommand(DeviceSpecificCommandRequest request)
{
return Execute<DeviceSpecificCommandResponse>(request);
}
public GetConfigValuesCommandResponse GetConfigValuesCommand(GetConfigValuesCommandRequest request)
{
return Execute<GetConfigValuesCommandResponse>(request);
}
public SetConfigValuesCommandResponse SetConfigValuesCommand(SetConfigValuesCommandRequest request)
{
return Execute<SetConfigValuesCommandResponse>(request);
}
public UpdateFirmwareCommandResponse UpdateFirmwareCommand(UpdateFirmwareCommandRequest request)
{
return Execute<UpdateFirmwareCommandResponse>(request);
}
上述每种情况都在各自的情况下扩展了一个类 Response 或 Request。
我尝试使用 Java 泛型创建与上述 C# 代码相同的实现,但没有任何成功。是否可以仅使用一个辅助方法来实现相同的功能,或者我是否被迫为每种单独的调用类型创建一个单独的辅助方法。
编辑 :
这是我当前的 Java 实现
private <T extends Response> execute(Request request)
{
String url = request.BuildUri(_baseUri, _accessKey);
Object[] response = Send(url, "");
if(((Integer)response[1] == 200))
{
T jsResponse = new T();
jsResponse.Body = (String)response[0];
jsResponse.Request = url;
return jsResponse;
}
else
{
throw new ResponseException(response[1], response[2], url, response[0]);
}
}
我目前的麻烦源于函数无法将返回识别为有效对象。无法将对象 T 初始化为响应,并且 T 对象无法识别响应中实现的方法。