• ベストアンサー

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; }

質問者が選んだベストアンサー

  • ベストアンサー
  • Gishi
  • ベストアンサー率57% (11/19)
回答No.4

こんな感じでしょうか。   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(); のような形になります。

kahata
質問者

お礼

完璧な回答をありがとうございました。test proofです。 もうひとつ、別の質問になるかも知れないのですが、javaでphpの call_user_func_array()のようなことができればよいのですが・・・ つまり、関数名をstringで与えて動的に関数を呼び出す方法です。

その他の回答 (13)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.3

Java には関数オブジェクトってないみたいね。 JDK7 の仕様には入るみたい http://journal.mycom.co.jp/articles/2006/08/23/java7closuer/index.html それまでは自前で適当に関数のように動作するクラスを作るしかないのでは?

回答No.2

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を省略して実行

参考URL:
http://mindprod.com/jgloss/callback.html
  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

関連するQ&A