2

これはリフレクションのようなもので、プリコンパイル済みのポインターではなく、名前だけでメソッドを呼び出すことができます。

JavaScript と同様に、次のことができます。

var fun = function(){    alert("Hello World!");    }
fun();

Java/J2ME でそのようなことは可能ですか? どのように?

4

5 に答える 5

2

この機能を模倣する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の代わりに、より適切な型またはジェネリックを使用できる場合がありますObjectObject[]この場合、柔軟性を最大限に高めるために使用しましたが、型チェックの方法があまりないため、理想的ではありません)。

詳細については、戦略デザインパターンを参照してください。

于 2009-09-11T15:44:43.977 に答える
2

j2me のインタープリターが必要な場合は、Hecl をチェックしてください: http://www.hecl.org

J2ME では、通常の Java で実行できる「凝った」ことのほとんどを実行できません。別の方法は、必要な関数を呼び出す一連の if/elseif ですが、それを実行するコードを作成できるように、事前にそれを知っておく必要があります。

于 2009-09-11T15:24:53.507 に答える
1

少なくともいくつかの方法があります。

BCELを使用して実行時にクラスを作成できますが、バイトコードを自分で作成する必要があります。また、バイトコードが不確かに見える場合、JVM のベリファイアがクラスを拒否する可能性があります。超簡単な解決策ではありませんが、実行可能です。

Sun の Java 6 実装には、JavaScript インタープリターであるRhinoが含まれているため、JavaScript を少しだけ使用したい場合は、おそらく必要なことを行うことができます。

これについてはよくわかりませんが、JDK がインストールされていればjavac、Java プログラムから呼び出すことができると思います。の出力は、カスタムクラスjavacを使用して実行時にロードできます。ClassLoader

于 2009-09-11T15:53:16.517 に答える
1

メソッドまたはReflectionの動的作成の後ですか?

最初は Java ではできませんが、インタープリター (Java が必要な場合はBeanShell ) を使用できます。

于 2009-09-11T15:12:59.530 に答える