- ベストアンサー
JAVAでCの関数ポインタのようなことをするには?
CのプログラムをJAVAに移植しています。関数ポインタのプログラムを移植したいのですがやり方がよく判りません。interfaceを実装するとできるようですが・・・ 以下のCプログラムをJAVAに移植する方法を教えてください。 #include <stdio.h> int func(int , int); int main() { int (*po)(int , int) , i; po = func; i = (*po)(10 , 3); printf("%d" , i); return 0; } int func(int i , int j) { return i + j; }
- みんなの回答 (14)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じでしょうか。 static interface Func { int func(int i, int j); } static class FuncImpl implements Func { public int func(int i, int j) { return i + j; } } public static void main(String[] args) { Func po = new FuncImpl(); int i = po.func(10, 3); System.out.println(i); } ややこしいですね。 Javaにも関数ポインタがあればいいのに。 po に別の関数を代入したい場合は、 po = new AnotherFuncImpl(); のような形になります。
その他の回答 (13)
- koko_u_
- ベストアンサー率18% (459/2509)
Java には関数オブジェクトってないみたいね。 JDK7 の仕様には入るみたい http://journal.mycom.co.jp/articles/2006/08/23/java7closuer/index.html それまでは自前で適当に関数のように動作するクラスを作るしかないのでは?
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
callback関数の渡す方法があるようですが、これで行けないでしょうか。 未検証です。 // 型がわかりません private myClass.func po=new myClass.func(); i= po(10, 3); class myClass{ //finalって必要? public final int func(int a, int b){ return a+b; } } JAVAはまだ素人ですが、 ifを省略するために配列にしたりすることが多いので、JAVAでもこういう方法が使えるといいですけどね。 if(a==0){ func0(); }else if(a==1){ func1(); }else if(a==2){ func2(); } // funcs[0]=new func0(); // funcs[1]=new func1(); // funcs[2]=new func2(); a=0; funcs[a](); //ifを省略して実行
- SAYKA
- ベストアンサー率34% (944/2776)
- 1
- 2
お礼
完璧な回答をありがとうございました。test proofです。 もうひとつ、別の質問になるかも知れないのですが、javaでphpの call_user_func_array()のようなことができればよいのですが・・・ つまり、関数名をstringで与えて動的に関数を呼び出す方法です。