我忘记了一个我用过的概念,并且无法记住它。
对于上下文,我曾经有一个像toString()
这样的方法,它有一个参数。这个参数允许我调用我的方法myMethod(System.out::println)
将其打印在屏幕上,还可以将其打印在具有相同语法的文件中。
有谁知道这个参数是什么?这个概念? 我认为它是一种 FunctionalInterface ,但我不知道它是什么。
答案 0 :(得分:2)
这称为方法引用,如果您知道要调用的方法,则应用此方法,前提是该方法已存在。
因为此lambda表达式调用现有方法,所以您可以使用 方法引用而不是lambda表达式:
Arrays.sort(rosterAsArray,Person :: compareByAge);
自Java-8以来可用。
使用您想要的例子:
public static void function(String s, Consumer<String> f) {
f.accept(s);
}
public static void main(String args[]) {
String test1 = "test";
String test2 = "test2";
function(test1, System.out::println);
function(test2, System.out::println);
function(test1, System.out::print);
function(test2, System.out::print);
}
答案 1 :(得分:0)
这对你有用吗?
public class C {
static void myMethod(java.io.PrintStream p) {
p.println("Hello!");
}
public static void main(String args[]) {
myMethod(System.out);
}
}
不幸的是,你不能直接传递System.out.println
,因为在Java方法中(在Java 8之前)不是第一类对象。你可以用方法做的就是调用它。作为解决方法,您可以引入接口并创建适配器类。
答案 2 :(得分:0)
这与java 8功能界面相吻合:
@FunctionalInterface
static interface MyPrinter {
public void println(String line);
}
static void myMethod(MyPrinter mp) {
mp.println("Hello wolrd");
}
...
public static void main(String[] args) throws IOException {
myMethod(System.out::println);
PrintWriter pw = new PrintWriter("myFile.txt");
myMethod(pw::println);
pw.close(); //never forget to close file output streams!
//EDIT: note that you can of course store your MyPrinter in a variable:
MyPrinter mp = System.err::println;
myMethod(mp);
}