当前位置: 首页 > 知识库问答 >
问题:

函数ref作为arg[重复]的模糊行为

邵昆琦
2023-03-14

我在下面给定的代码上得到了一个模糊的行为:

public class Main {

    public static void main(String[] args) {

        labo(Main::myFunction);
        labo(Main::myFunctionWithNoArgs);//Compiletime exception!!!
        labo(String::toUpperCase);//Compiled line!!!
    }

    public static void labo(Function<String,String> function){
        System.out.println(function.apply("test"));
    }

    public static String myFunction(String arg){
        return arg;
    }

    public static String myFunctionWithNoArgs(){
        return "";
    }
}

我的问题是:我不明白为什么我没有得到一个编译时异常arg字符串::toUpperCase和没有主::myFunctionSusNoArgs即使toUpperCase()是一个方法没有args相同的myFunctionSusNoArgs()

共有2个答案

计胤
2023-03-14

如果你把它写成lambda,可能会更有意义:

labo(t -> t.toUpperCase())
师成弘
2023-03-14

String::toUpperCase等价于-

这里的“参数”是方法的接收器,即转换为大写的字符串。

 类似资料:
  • 我们在代码库中有一个处理程序类的层次结构,它们实现了一种责任链原则。有一个抽象父类,它由几个子类扩展,这些子类也在其构造函数中接收抽象 我们现在需要将具体子类之一的实例注入到新实现的服务类中,我们应该用XML来配置它。我们可以为抽象父类配置一个抽象bean,但这个bean似乎不被允许用作具体子bean的构造函数-arg 有什么办法可以克服这一点吗?处理程序类层次结构是遗留代码,我们现在无法修改它们

  • 但是,我犯了一个错误,写了这样一段话: 然后我写道: 没有打印任何输出,所以我的问题是,基本上,为什么?

  • 箭头函数: 正规函数 这两个结果应该是相同的,但是看起来像上面定义的arrowFunc考虑第一个arg列表,而normalFunc考虑第二组arg列表。

  • 如果我不使用' a '和' b '变量,一切正常,否则,C返回: 错误:无法转换“main()::” 注意:初始化'void f(int, void(*)(int))'的参数2

  • 我做了这个例子。 我试图模糊背景图像,但主要内容也模糊了(

  • 假设我们有我的代码的简化版本: 我试图将lambda函数作为参数传递给函数,但只有当我将lambda显式分配给特定的类型时,它才起作用。这是可行的: 上面的例子是可行的,但我想实现下面的例子,因为审美的原因,不知道这是否可能: 我唯一的要求是应该接受带有模板化返回类型的lambda和函数,以及带有特定类型的输入参数,例如。