我的情况:
class Test {
private static void xxx(String s) throws SQLException {
System.out.println(s);
}
private static void yyy(Consumer<String> f) {
try {
f.apply('hello');
} catch (SQLException e) {
System.out.println("error");
}
}
public static void main(String args[])() {
yyy(xxx); // <-- not working!!
}
}
我尝试做的是将静态方法作为另一个静态方法的参数传递。我认为声明方法yyy
的签名的正确方法是Consumer
,但我不确定另一部分,将xxx
作为参数传递。
我找到的可能解决方案是写
yyyy(s -> xxx(s));
但它看起来很难看,如果xxx
抛出异常,它就不会起作用。
使用
yyy(Test::xxx);
我收到了这个错误
error: incompatible thrown types SQLException in method reference
答案 0 :(得分:2)
您可以使用方法参考:
class Test {
private static void xxx(String s) {
//do something with string
}
private static void yyy(Consumer<String> c) {
c.accept("hello");
}
public static void zzz() {
yyy(Test::xxx);
}
}
答案 1 :(得分:1)
您可以尝试以下代码
class Test {
private static Consumer<String> xxx(String s) {
//do something with string
return null;// return Consumer for now passing null
}
private static void yyy(Consumer<String> f) {
//do something with Consumer
}
public static void zzz(){
yyy(xxx("hello"));
}
}