Personal tools
You are here: Home ブログ アリエル開発者のブログ Javaでタプルを返したい
Document Actions

Javaでタプルを返したい

Java初心者の開発者です。

PythonやPerlのようにJavaのメソッド返したいのですが、どうすればいいのでしょう?Pythonだと

def func():
    return 1, "func"

のようにかけます。Cの場合だと、

void func(int* i, char** s) {
    *i = 1
    *s = "hoge";
}

のようになります。Javaではどう書くのが正しいのでしょう。僕が思いついた方法を書きます。

方法1(配列を使う):

class C {
    void func(int[] i, String[] s) {
        i[0] = 1;
        s[0] = "hoge";
    }
}

方法2(オブジェクトを返す):

class C {
    public class D {
        public int i;
        public String s;
    }
 
     D func() {
         D d = new D();
         d.i = 1;
         d.s = "hoge";
         return d;
     }
 }

最初の方法だとC的で古い世代の人だとばれてしまいます。二つ目の方法だと、単にデータを返したいためだけにクラスを定義するので、違和感があります。

Java的にはどうすればよいのでしょうか?

Category(s)
開発
The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/dev/java30bf30eb30928fd43057305f3044/tbping

Re:Javaでタプルを返したい

Posted by anaka at 2006-02-10 10:08
全てがObjectであることを利用して、
Object[] func() {
return new Object[]{new Interger(1), "hoge"};
}

JDK1.5なら
Object[] func() {
return new Object[]{1, "hoge"};
}

Genericを使って、
public class Tuple {
public L left;
public R right;
Tuple(L left, R right) {
this.left = left;
this.right = right;
}
}

Tuple func() {
return new Tuple(1, "hoge");
}

3値のTupleを返す場合は、
Tuple> func3() {
return new Tuple>(1, new Tuple("hoge", 3.14);
}

動くかどうかは知りません。

Re:Javaでタプルを返したい

Posted by anaka at 2006-02-10 10:11
Genericの記述がタグ扱いされて消えました。
困ったもんだ。

public class Tuple<L, R> {
public L left;
public R right;
Tuple(L left, R right) {
this.left = left;
this.right = right;
}
}

Tuple<Integer, String> func() {
return new Tuple<Integer, String>(1, "hoge");
}

Tuple<Integer, Tuple<String, Double>> func3() {
return new Tuple<Integer, Tuple<String, Double>>(1, new Tuple<String, Double>("hoge", 3.14);
}
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
(Required)
This helps us prevent automated spamming.
Captcha Image


Copyright(C) 2001 - 2006 Ariel Networks, Inc. All rights reserved.