3

我有以下方法,

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 类的对象。我怎样才能做到这一点?

4

7 回答 7

5

您可以创建一个包含这两个值的自定义类型。

public class ResponseObject {
    private String responseString;

    private Response response;

    //accessors
}

然后返回该类的一个实例作为结果。

于 2013-08-15T08:06:19.243 回答
3

您可以按如下方式返回对象数组:

public Object[] process(Applicant appl)
{
...

但您需要跟踪插入对象的索引(字符串、响应)

另一种方式,您可以返回Map<String, Object>具有表示值的键。

于 2013-08-15T08:10:19.703 回答
2

你不能。

您只能返回您在方法签名中提到的类型。

你能做的是,

Response在名为responseStringand add settersand的类中创建一个字段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;
}
于 2013-08-15T08:07:23.977 回答
1

您需要为此创建一个包装类。与其他一些语言不同,Java 语言不支持自动解包的元组返回值。只需像这样创建一个数据类:

class ResponseData {
    public final String responseString;
    public final Response response;

    public ResponseData(String responseString, Response response) {
        this.responseString = responseString;
        this.response = response;
    }
}
于 2013-08-15T08:08:19.950 回答
0

如果两个对象都是单独的实体,则首选的方法是通过组合

    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
}
于 2013-08-15T08:08:19.507 回答
0

Java 方法由其签名确定。一个范围内只能存在一个唯一的签名。

方法签名:方法声明的两个组成部分包括方法签名——方法的名称和参数类型。

正如描述中所建议的,返回类型不在签名中,因此不可能有两个仅通过返回类型不同的方法。

但是,有几种方法可以返回不同的对象类型。

对象类型

返回Object类型,因为所有类都是 类型Object,然后将其转换为正确的类型。

public Object process(Applicant appl);

遗产

定义一个基类并从基类派生ResponseResponseString派生

class ResponseBase
{

}

并派生你的类

class Response extends ResponseBase{...}
class ResponseString ResponseBase{...}

并从您的方法返回基类

公共 ResponseBase 流程(申请人申请);

作品

将你的ResponseandResponseString包装到一个包装类并返回它。

class ResponseWrapper
{
    Response response;
    ResponseString responseString;
     //getter setters

}

ResponseWrapper从您的方法返回

public ResponseWrapper process(Applicant appl);

也可以看看

设计模式

定义方法

于 2013-08-15T08:11:26.280 回答
0

选项 1. 您可以返回您的 CustomereResponse。

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;
}
于 2013-08-15T09:06:01.383 回答