我正在开发一个测试类,它允许用户进行任意方法调用。然后我的班级会触发它们。
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).
}
第二个performTest()
出现以下编译错误。
Main.MyTestUtil类型中的performTest(Object)方法不适用于参数(void)
void function()
返回的 thing 到方法参数中。(或变成一个变量 - 差别不大)
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
。但它只接受null
或类型Void
(大V),这不是void
(小v),并且不符合用户的方法。
// 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) {}
感谢您的帮助!
答案 0 :(得分:0)
解决此问题的最直接方法是让void
方法返回Void
,而您已经调出。 void
类型永远不会被Java中的值类型接受,因此您使用的样式将不适用于void
。
另一种方法是允许用户提供Runnable
,然后代表他们运行,然后让他们调用void
中的Runnable
方法。