3

私は次の方法を持っています、

public Response process(Applicant appl)
{

    String responseString;
    String requestString;
    requestString = createRequestString(appl);
    responseString = sendRequest(requestString);
    Response response = parseResponse(responseString);
    return response;
}

ここでは、responseString と response の両方を返したいと思います。1 つは String 型で、もう 1 つは 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というクラスにフィールドを作成し、とresponseStringを追加settersgettersます。

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

オプション 1. CustomerResponse を返すことができます。

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 に答える
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 メソッドは、その署名によって決定されます。スコープ内に存在できる一意の署名は 1 つだけです。

メソッド シグネチャ: メソッド宣言の 2 つのコンポーネントは、メソッド シグネチャ (メソッドの名前とパラメーターの型) を構成します。

説明で示唆されているように、戻り値の型は署名されていないため、戻り値の型だけが異なる 2 つのメソッドを持つことはできません。

ただし、さまざまなオブジェクト タイプを返す方法がいくつかあります。

オブジェクトタイプ

Objectすべてのクラスは の型であるため型を返しObject、適切な型にキャストします。

public Object process(Applicant appl);

継承

基本クラスを定義し、基本から派生さResponseせますResponseString

class ResponseBase
{

}

そしてあなたのクラスを派生させます

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

メソッドから基本クラスを返します

public ResponseBase プロセス (申請者 appl);

構成

ResponseandResponseStringをラッパー クラスにラップして返します。

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

}

メソッドから戻りResponseWrapperます

public ResponseWrapper process(Applicant appl);

こちらもご覧ください

デザインパターン

メソッドの定義

于 2013-08-15T08:11:26.280 に答える