これはリフレクションのようなもので、プリコンパイル済みのポインターではなく、名前だけでメソッドを呼び出すことができます。
JavaScript と同様に、次のことができます。
var fun = function(){ alert("Hello World!"); }
fun();
Java/J2ME でそのようなことは可能ですか? どのように?
この機能を模倣する1つの方法は、戦略クラスを作成することです。
interface Function
{
Object call(Object[] arguments);
}
あなたが提案したことをするために、単に以下をしてください(Javaが通常そうであるように、もう少し冗長です):
static class Fun implements Function
{
public Object call(Object[] arguments)
{
System.out.println("Hello, world");
return null;
}
}
Function fun = new Fun();
fun.call(null);
状況によっては、andの代わりに、より適切な型またはジェネリックを使用できる場合がありますObject
(Object[]
この場合、柔軟性を最大限に高めるために使用しましたが、型チェックの方法があまりないため、理想的ではありません)。
詳細については、戦略デザインパターンを参照してください。
j2me のインタープリターが必要な場合は、Hecl をチェックしてください: http://www.hecl.org
J2ME では、通常の Java で実行できる「凝った」ことのほとんどを実行できません。別の方法は、必要な関数を呼び出す一連の if/elseif ですが、それを実行するコードを作成できるように、事前にそれを知っておく必要があります。
少なくともいくつかの方法があります。
BCELを使用して実行時にクラスを作成できますが、バイトコードを自分で作成する必要があります。また、バイトコードが不確かに見える場合、JVM のベリファイアがクラスを拒否する可能性があります。超簡単な解決策ではありませんが、実行可能です。
Sun の Java 6 実装には、JavaScript インタープリターであるRhinoが含まれているため、JavaScript を少しだけ使用したい場合は、おそらく必要なことを行うことができます。
これについてはよくわかりませんが、JDK がインストールされていればjavac
、Java プログラムから呼び出すことができると思います。の出力は、カスタムクラスjavac
を使用して実行時にロードできます。ClassLoader
メソッドまたはReflectionの動的作成の後ですか?
最初は Java ではできませんが、インタープリター (Java が必要な場合はBeanShell ) を使用できます。