gpt4 book ai didi

Java 8 方法引用 : how to determine which method to take?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:46:43 24 4
gpt4 key购买 nike

假设我们有以下类:

public class NameCreator {

public String createName(String lastname) {
return lastname;
}

public String createName(String lastname, String firstName) {
return lastname + " " + firstname
}

...
}

如果我想通过 Java 8 方法引用调用它:

NameCreator::createName

我会得到错误:

Cannot resolve method createName

如何定义要调用哪些方法?

最佳答案

NameCreator::createName暗示该方法是静态的(下表中的类型#1),或者功能接口(interface)目标也采用类的实例(类型#3,例如
BiFunction<NameCreator, String, String> )。您的方法不是静态的,因此您的目标可能不会采用实例,这就是您收到“无法解析方法”错误的原因。您可能希望在实例(类型 #2)上使用方法引用。在类里面,您可以使用:

Function<String, String> func = this::createName

在课外你可以使用:

NameCreator creator = new NameCreator();
Function<String, String> func = creator::createName;

至于是使用单参数还是双参数版本,这取决于所针对的功能接口(interface)。以上将使用您的第一种方法,因为 Function<String, String>接受一个字符串并返回一个字符串。例如,以下功能接口(interface)将使用您的第二种方法:

NameCreator creator = new NameCreator();
BiFunction<String, String, String> func = creator::createName;

参见: Function , BiFunction ,和整个 java.util.function package

您可能还对 the Java tutorial on method references 感兴趣,特别是这部分:


方法引用有四种:

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
==============================================================================================

关于Java 8 方法引用 : how to determine which method to take?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51322724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com