- PR -

Java関数から関数名を返せますか?

投稿者投稿内容
Mxfull
大ベテラン
会議室デビュー日: 2006/02/15
投稿数: 146
投稿日時: 2007-01-21 17:15
お世話になります。

C++の関数から関数名を戻り値として返せますが、
Javaでは出来ますか?つまり、下記のようにできますか?

int f1(int x)
{
...
}
??? f2( )
{
...
   return f1;
}
宜しくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-01-21 17:24
引用:

Mxfullさんの書き込み (2007-01-21 17:15) より:

C++の関数から関数名を戻り値として返せますが、


実行されているメソッドの名称を返したいのでしょうか?

引用:

??? f2( )
{
  ...
  return f1;
}


ここを見ると、実行した戻り値をさらに戻り値として返したいように見えますが。

# 名称だとしたら、別のメソッド名なんて、普通要らないでしょうし...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Mxfull
大ベテラン
会議室デビュー日: 2006/02/15
投稿数: 146
投稿日時: 2007-01-21 17:35
バッチ処理などの時に、まずどの関数を実行すべきか関数で決め、
この関数の戻り値は関数名なので、直接この戻り値を利用して
必要な関数を実行します。このようなやり方は必要だと思います。

このような関数はどう定義するか分からないので、
ご存知の方はご教授ください。

_________________
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-01-21 17:49
java.lang.Class#getMethod(java.lang.String)
java.lang.reflect.Method

ググればサンプルもいっぱいあるし、
この辺を調べるとわかると思います。
Jaune
会議室デビュー日: 2006/12/02
投稿数: 16
投稿日時: 2007-01-21 22:03
インタフェースを使って以下のようにするのはどうでしょうか?

コード:
interface Hoge {
    int f(int x);
}

class Foo implements Hoge {
   ...
}

class Bar implements Hoge {
   ...
}

Hoge f2(...) {
    if (なにかの条件) {
        return new Foo();
    } else {
        return new Bar();
    }
}


# でもこれだと似たような方法で C++ でもできそうだなあ(^^ゞ
# 「戻り値は関数名」と言っているし、これではダメなのかしらん?
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-01-21 22:34
こんばんは。

引用:

Mxfullさんの書き込み (2007-01-21 17:15) より:
C++の関数から関数名を戻り値として返せますが、
Javaでは出来ますか?つまり、下記のようにできますか?



「関数名」ではなく、「関数ポインタ」のことですね?
Javaだと次期バージョン(Java7)で「メソッド参照(Method References)」として
追加が検討されているようですが…

ちなみにC++では、「関数オブジェクト(function object)」というものもあります。
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2007-01-22 11:46
引用:
バッチ処理などの時に、まずどの関数を実行すべきか関数で決め、


折角 Javaを使用するのだから、関数単位ではなくクラス単位で切り替えるべきでしょう。
変なトリックを使用するよりも、ちゃんとしたオブジェクト指向の設計をしたほうが良いと思います。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-01-22 12:03
引用:
バッチ処理などの時に、まずどの関数を実行すべきか関数で決め、



関数ポインタという手法はJavaでは用いることができませんが、
Strategyパターンを使うことで上記の目的を達成することはできます。
デザインパターンについてはC++でも扱えることですから
オブジェクト指向が理解できていればJavaでも苦労なく扱えることでしょう。

コード:
public interface Hoge {
    void hoge();
}

public class Hoge0 implements Hoge {
    public void hoge() {
        // 処理の実装
    }
}

public Hoge HOGE_0 = new Hoge0();

public class Main {
    public Hoge getHoge(int param) {
        if (param == 0) {
            return HOGE_0;
        } else if (param == 1) {
            ...
        }
    }
}

スキルアップ/キャリアアップ(JOB@IT)