可以说我们有以下课程:
public class NameCreator {
public String createName(String lastname) {
return lastname;
}
public String createName(String lastname, String firstName) {
return lastname + " " + firstname
}
...
}
Run Code Online (Sandbox Code Playgroud)
如果我想通过Java 8方法引用它:
NameCreator::createName
Run Code Online (Sandbox Code Playgroud)
我会得到错误:
Cannot resolve method createName
Run Code Online (Sandbox Code Playgroud)
如何定义我想要调用哪些方法?
Mic*_*ael 11
NameCreator::createName意味着该方法是静态的(下表中的种类#1),或者功能接口目标也采用该类的实例(例如,种类#3 BiFunction<NameCreator, String, String>).你的方法不是静态的,所以你的目标可能不会占用实例,这就是你得到"无法解决方法"错误的原因.您可能希望在实例(种类#2)上使用方法引用.在课堂上,您可以使用:
Function<String, String> func = this::createName
Run Code Online (Sandbox Code Playgroud)
从课外,您可以使用:
NameCreator creator = new NameCreator();
Function<String, String> func = creator::createName;
Run Code Online (Sandbox Code Playgroud)
至于是使用单参数还是双参数版本,它取决于所针对的功能接口.上面将使用您的第一个方法,因为Function<String, String>接受一个String并返回一个String.作为示例,以下功能接口将使用您的第二种方法:
NameCreator creator = new NameCreator();
BiFunction<String, String, String> func = creator::createName;
Run Code Online (Sandbox Code Playgroud)
请参阅:Function,BiFunction和整个java.util.function包
您可能还对方法引用的Java教程感兴趣,特别是这部分:
有四种方法参考:
Kind | Example
==============================================================================================
Reference to a static method | ContainingClass::staticMethodName
-------------------------------------------------------+--------------------------------------
Reference to an instance method of a particular object | containingObject::instanceMethodName
-------------------------------------------------------+--------------------------------------
Reference to an instance method of an arbitrary object | ContainingType::methodName
of a particular type |
-------------------------------------------------------+--------------------------------------
Reference to a constructor | ClassName::new
==============================================================================================
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
316 次 |
| 最近记录: |