2011-09-14 20 views
1

これはおそらく非常にばかげた質問です。しかし、メソッドが複数のオブジェクトを返す方法はありますか? 2弦のように?メソッドが複数のオブジェクトを返す方法を教えてください。

public static String multipleReturnMethod(){ 

    String a = "a"; 
    String b = "b"; 

    return a; 
    return b; 
} 

可能ですか?ありえない?どうすればにすることができますか?あなたは...など、

public static String[] multipleReturnMethod(){  
    String a = "a"; 
    String b = "b"; 
    return new String[] { a, b }; 
} 

またはリスト、または2つの値をカプセル化タイプ...

を配列を返すことができ

+0

は、代わりにそれらの値を返す別の型を作り、 'java.util.Listに' –

+4

を使用しています。 Javaはオブジェクト指向言語ですが、オブジェクトを作成しない方法を見つけるのが大好きです。 = D – Tejs

答えて

6

あなただけのメソッドから単一の値を返すことができますその値自体が複数の「サブ値」にアクセスする可能性があります。

あなたがしようとしていることについてさらに詳しく知ることができれば、より多くのことができます。リターンオブジェクトをchaningなし

+0

これは、複数のオブジェクトのタイプが同じである場合(前述のように)に機能します。より一般的な異なる型の場合、ラッパークラスが必要です。配列には、呼び出し元が特定の値(0 = a、1 = b)を参照するインデックスを知る必要があるという欠点もあります。 –

+0

@ジョン:特定の意味を持つ別の値であるのか、それとも本当に「最初の値か2番目の値なのか」などによって異なります。OPが本当にやろうとしていることを知るのは難しいです。 (「異なる型」は「2つの値をカプセル化する型」でカバーされます) –

3

ない可能:

  1. どちらかそれのためのクラスを作成します。

    class Strings { 
        String a, b; 
        Strings(String a, String b) { 
         this.a = a; 
         this.b = b; 
        } 
    } 
    
    public static Strings multipleReturnMethod(){ 
        return new Strings("a", "b"); 
    } 
    
  2. または配列

    public static String[] multipleReturnMethod(){ 
        return new String[] { a, b }; 
    } 
    
-1

一つの方法を返します出力オブジェクトをあなたのメソに渡すことです

public static ArrayList<String> multipleReturnMethod(ArrayList<String> output) { 

String a = "a"; 
String b = "b"; 

output.add(a); 
output.add(b); 
return output; //not really necessary 
} 

当然の出力は、あなたの方法の外に作成する必要があります。dは、配列リストの形で、たとえば、それが何かのようになりますので。

+1

'return output'はコンパイルされません。 –

+0

ArrayListを返すようにしようとしています... 'public static ArrayList multipleReturnMethod(" ... ")' –

+0

私の悪い - 私はコピー/貼り付けをしてはいけません大急ぎで。 – LordDoskias

0

Javaではできません。返す要素の周りにラッパークラスを作成し、その単一の要素を返し、返すものがすべて含まれている必要があります。

FunctionalJavaには、これを簡単にする便利なクラスPがあります。 http://functionaljava.googlecode.com/svn/artifacts/3.0/javadoc/fj/P.html

return P.p(a,b); 
0

それは、より多くのオブジェクト、その後返却することは不可能ということはありません! 解決方法は、返すオブジェクトが含まれているオブジェクトを返すことです。

1

あなたが署名を維持したい場合は、定義された区切り文字と文字列の連結ができます

public static final String DELIMITER = "\t"; // or something else 
               // not used in strings 

public static String multipleReturnMethod(){ 

    String a = "a"; 
    String b = "b"; 

    return a + DELIMITER + b; 
} 

を(私は署名をchangeing配列や値のコレクションを返すことを好むが、ジョンの答えを参照してください)

0

あなたがより複雑な例を持っている場合は、あなたがCAに結果の任意の組み合わせを返すことができます見ることができるように、あなたはリスナーパターン

interface ResultListener { 
    void resultOne(String text); 
    void resultTwo(String text, int number); 
} 

public static void multipleReturnMethod(ResultListener result){ 
    result.resultOne("a"); 
    result.resultOne("b"); 
    result.resultTwo("C", 1); 
} 

を使用することができますミックスまたはタイプの組み合わせでもっと楽しい。

1

彼らはオブジェクトのすべての同じ種類ある場合、最も簡単な方法は、ちょうどあなたが異なるタイプのオブジェクトを戻したい場合は、オブジェクトのArrayListのを返すオブジェクト

public static String[] methodA(){ 
    String[] temp = new String[5]; 
    // do work 
    return temp; 
} 

のその型の配列を返すことです。不可

public static ArrayList<Object> methodB(){ 
    ArrayList<Object> temp = new ArrayList<Object>(); 
    // do work 
    return temp; 
} 
関連する問題