我有以下方法,
public Response process(Applicant appl)
{
String responseString;
String requestString;
requestString = createRequestString(appl);
responseString = sendRequest(requestString);
Response response = parseResponse(responseString);
return response;
}
这里我想返回responseString和response,一个是String类型,另一个是response类的对象。我该怎么做?
您可以创建一个自定义类型,它包含这两个值。
public class ResponseObject {
private String responseString;
private Response response;
//accessors
}
然后返回该类的一个实例作为结果。
您可以返回如下对象数组:
public Object[] process(Applicant appl)
{
...
但您需要跟踪插入对象的索引(字符串、响应)
另一种方法是,您可以返回具有表示值的键的Map<String, Object>
。
不可以。
您只能返回方法签名中提到的类型。
你能做的就是
在Response
类中创建一个名为responseString
的字段,并添加setters
和getters
。
public Response process(Applicant appl)
{
String responseString;
String requestString;
requestString = createRequestString(appl);
responseString = sendRequest(requestString);
Response response = parseResponse(responseString);
response.setResponseString(responseString);
return response;
}
您需要为此创建一个包装器类。与其他一些语言不同,Java语言不支持使用自动解包的元组返回值。只需创建这样一个数据类:
class ResponseData {
public final String responseString;
public final Response response;
public ResponseData(String responseString, Response response) {
this.responseString = responseString;
this.response = response;
}
}
如果两个对象都是独立的实体,则首选的方法是通过组合:
String responseString;
String requestString;
requestString = createRequestString(appl);
responseString = sendRequest(requestString);
Response response = parseResponse(responseString);
return new compositObj(response, responseString);
class compositObj{
Response res;
String resString;
compositObj(Response r, String s){
res = r;
resString = s;
}
//getters setters if needed
}
Java方法由其签名决定。一个作用域中只能存在一个唯一签名。
方法签名:方法声明的两个组件包括方法签名——方法名称和参数类型。
正如描述中所建议的,返回类型不在签名中,因此不可能有两个只因返回类型不同的方法。
但是,有几种方法可以返回不同的对象类型。
对象类型
返回Object
类型,因为所有类都是Object
的类型,然后将其强制转换为正确的类型。
public Object process(Applicant appl);
继承
定义基类并从基本派生Response
和ResponseString
class ResponseBase
{
}
并导出你的类
class Response extends ResponseBase{...}
class ResponseString ResponseBase{...}
并从您的方法返回基类
公共响应基础流程(申请人申请);
成分
将Response
和ResponseString
包装到包装器类中并返回。
class ResponseWrapper
{
Response response;
ResponseString responseString;
//getter setters
}
并从您的方法返回ResponseWrapper
public ResponseWrapper process(Applicant appl);
另请参见
设计模式
定义方法
选项1。您可以返回自定义响应。
public class CustomResponse {
private String responseString;
private Response response;
public void setResponseString(String responseString){
this.responseString = responseString;
}
public String getResponseString(){
return this.responseString;
}
public void setResponse(Response response){
this.response = response;
}
public Response getResponse(){
return this.response;
}
}
选项2。您可以将responseString作为参数传递。由于作为参数传递的非基元数据类型具有变量的引用,因此当您设置responseString时,您的变量值将被更新。
public Response process(Applicant appl,String responseString)
{
String requestString;
requestString = createRequestString(appl);
responseString = sendRequest(requestString);
Response response = parseResponse(responseString);
return response;
}