我有以下方法,
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类的对象。我怎么能这样做?
答案 0 :(得分:5)
您可以创建一个包含两个值的自定义类型。
public class ResponseObject {
private String responseString;
private Response response;
//accessors
}
然后返回该类的实例。
答案 1 :(得分:3)
您可以按如下方式返回对象数组:
public Object[] process(Applicant appl)
{
...
但您需要跟踪插入对象的索引(字符串,响应)
另一种方法是,您可以返回Map<String, Object>
代表值的键。
答案 2 :(得分:2)
不,你不能。
您只能返回方法签名中提到的类型。
你能做的是,
在名为Response
的{{1}}课程中创建一个字段,然后添加responseString
和setters
。
getters
答案 3 :(得分:1)
您需要为此创建一个包装类。与其他一些语言不同,Java语言不支持使用自动解包的元组返回值。只需创建一个这样的数据类:
class ResponseData {
public final String responseString;
public final Response response;
public ResponseData(String responseString, Response response) {
this.responseString = responseString;
this.response = response;
}
}
答案 4 :(得分:0)
如果两个对象都是单独的实体,则执行此操作的首选方法是通过composition:
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
}
答案 5 :(得分:0)
Java方法由其签名决定。范围内只能存在一个唯一的签名。
方法签名:方法声明的两个组件包括方法签名 - 方法名称和参数 类型。
正如描述中所建议的,返回类型不在签名中,因此不可能有两种方法只有返回类型不同。
但是,有几种方法可以返回不同的对象类型。
对象类型
返回Object
类型,因为所有类都是Object
的类型,然后将其转换为正确的类型。
public Object process(Applicant appl);
<强>继承强>
定义基类并从基础
派生Response
和ResponseString
class ResponseBase
{
}
并派生你的课程
class Response extends ResponseBase{...}
class ResponseString ResponseBase{...}
并从您的方法返回基类
公共ResponseBase流程(申请人appl);
<强>组合物强>
将您的Response
和ResponseString
包装到包装类中并将其返回。
class ResponseWrapper
{
Response response;
ResponseString responseString;
//getter setters
}
并从您的方法
返回ResponseWrapper
public ResponseWrapper process(Applicant appl);
另见
答案 6 :(得分:0)
选项1。 您可以退回CustomeResponse。
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;
}