0

ユーザーが任意のメソッド呼び出しを行えるようにするテストクラスを開発しています。次に、私のクラスがそれらをトリガーします。

static class UserClass {
    static String method_01() { return ""; }
    static void   method_02() {}
}
class MyTestUtil {
    void test() {
        // HowTo:
        // performTest( <Please put your method calls here> );
        performTest( UserClass.method_01() );       // OK
        performTest( UserClass.method_02() );       // compile error
    }
    void performTest(Object o) {}
    // This is only a simplified version of the thing.
    // It is okay that the UserClass.method_calls() happens at the parameter.
    // This captures only the return value (if any).
}

2 つ目performTest()は、次のコンパイル エラーです。

Main.MyTestUtil 型のメソッド performTest(Object) は、引数 (void) には適用されません。

要するに、から返されたものvoid function()をメソッドパラメーターに受け入れる方法を見つけています。

(または変数に - それほど違いはありません)

static void function() {}

public static void main(String[] args) {
    this_function_accepts ( function() );   
    // The method this_function_accepts(Void) in the type Main is not applicable for the arguments (void)

    Void this_var_accepts = function();
    // Type mismatch: cannot convert from void to Void
}

私は少し研究をしました。そして、私はクラスを実現しましたjava.lang.Void。しかし、それは(小さな v) ではなく、ユーザーのメソッドに対して通常ではないnullVoid(大きな V)のみを受け入れます。void

// adding these overloading methods doesn't help
void this_function_accepts() {}
void this_function_accepts(Void v) {}
void this_function_accepts(Void... v) {}
void this_function_accepts(Object v) {}
void this_function_accepts(Object... v) {}

助けてくれてありがとう!

4

1 に答える 1

0

この問題を解決する最も直接的な方法は、既に呼び出したvoidメソッドを代わりに返すことです。Voidこのvoid型は Java では値の型として受け入れられないため、使用しているスタイルは では機能しませんvoid

もう 1 つの方法は、ユーザーが を提供できるようにすることですRunnable。この はユーザーに代わって実行され、ユーザーは のvoidメソッドを呼び出すことができますRunnable

于 2013-07-11T19:48:57.097 に答える