175

JVM に追加されたクールな新機能についてよく耳にしますが、それらのクールな機能の 1 つが invokedynamic です。Java でのリフレクション プログラミングがどのように簡単または改善されるのかを知りたいです。

4

4 に答える 4

174

これは新しいJVM命令であり、コンパイラが以前よりも緩い仕様のメソッドを呼び出すコードを生成できるようにします。「ダックタイピング」とは何かを知っている場合、invokedynamicは基本的にダックタイピングを可能にします。Javaプログラマーがそれを使ってできることはそれほど多くありません。ただし、ツールクリエーターの場合は、それを使用して、より柔軟で効率的なJVMベースの言語を構築できます。これは非常に詳細なブログ投稿です。

于 2011-07-10T02:23:10.370 に答える
7

少し前に、C# はクールな機能、C# 内の動的構文を追加しました。

Object obj = ...; // no static type available 
dynamic duck = obj;
duck.quack(); // or any method. no compiler checking.

リフレクティブ メソッド呼び出しのシンタックス シュガーと考えてください。非常に興味深いアプリケーションを持つことができます。http://www.infoq.com/presentations/Statically-Dynamic-Typing-Neal-Gafterを参照

C# の動的型の責任者である Neal Gafter は、SUN から MS に亡命しました。したがって、SUN 内で同じことが議論されていたと考えるのは不合理ではありません。

その直後に、ある Java 関係者が同様のことを発表したことを覚えています。

InvokeDynamic duck = obj;
duck.quack(); 

残念ながら、この機能は Java 7 にはありません。非常に残念です。Java プログラマーにとって、プログラムで簡単に活用する方法はありませんinvokedynamic

于 2011-07-10T04:59:33.423 に答える