Java8中的函数如何获取Cls::func(Cls cls)的引用返回Object;

鲨鱼

我使用以下测试用例来测试 java.util.function.Function。

public class TestFunc {

  public String nonStaticFunc1 () {
    return "nonStaticAndPara of fun1";
  }
  public String nonStaticFunc1 (TestFunc tf) {
    return "nonStaticWithPara of fun1";
  }
  public String nonStaticFunc2 (TestFunc tf) {
    return "nonStaticWithPara of fun2";
  }
  @Test
  public void testFunc () {
    Function<TestFunc, String> func = TestFunc::nonStaticFunc1;
    System.out.println(func.apply(new TestFunc()));
    // Cannot make a static reference to the non-static method nonStaticFunc2(TestFunc) from the type TestFunc
    // Function<TestFunc, String> func2 = TestFunc::nonStaticFunc2;
  }
}
/* OUTPUT
 nonStaticAndPara of fun1
*///:~

始终对应于 TestFunc::nonStaticFunc1(void) 的 Function 返回 String;我检查了函数源代码:

public interface Function<T, R> {
  R apply(T t);
}

似乎当函数的参数为​​空时,java 会自动将一个类对象导入其中。那么我怎样才能得到一个 TestFunc::nonStaticFunc1(TestFunc)?提前致谢。

这是非常错误的。

java自动导入一个类对象

它是面向对象编程语言中的函数式编程。有必要知道您正在使用或调用哪个对象。

我不是讲师,所以让我们把解释留待以后看看我修改过的代码:

import java.util.function.Function;

public class TestFunc {
    private final String name;

    public String getName() {
        return name;
    }

    public TestFunc(String name) {
        this.name = name;
    }

    public String nonStaticFunc1() {
        return "nonStaticAndPara of fun1 (no further parameter): " + this.name;
    }

    public String nonStaticFunc1(TestFunc parameter) {
        // parameter is received but ignored
        return "nonStaticWithPara of fun1 (parameter is received but ignored): " + this.name;
    }

    public String nonStaticFunc2(TestFunc parameter) {
        // parameter is received and used
        return "nonStaticWithPara of fun2 (parameter is received and used): " + parameter.getName();
    }

    public void testFunc(TestFunc parameter) {
        Function<TestFunc, String> func;

        func = TestFunc::nonStaticFunc1;
        System.out.println(func.apply(parameter));

        func = testFunc -> testFunc.nonStaticFunc1();
        System.out.println(func.apply(parameter));
        // TestFunc::nonStaticFunc1
        // means
        // calling nonStaticFunc1 from the parameter as in `apply(parameter)`

        func = this::nonStaticFunc1;
        System.out.println(func.apply(parameter));

        func = testFunc -> this.nonStaticFunc1(testFunc);
        System.out.println(func.apply(parameter));
        // this::nonStaticFunc1
        // means
        // this.nonStaticFunc1(testFunc)

        // similarly func2
        func = this::nonStaticFunc2;
        System.out.println(func.apply(parameter));

        func = testFunc -> this.nonStaticFunc2(testFunc);
        System.out.println(func.apply(parameter));

        // func = TestFunc::nonStaticFunc2; // doesn't make sense, there's no such thing as parameter of the parameter
    }

    public static void main(String[] args) {
        TestFunc parameter = new TestFunc("param");
        TestFunc caller = new TestFunc("caller");
        caller.testFunc(parameter);
    }
}

输出:

nonStaticAndPara of fun1 (no further parameter): param
nonStaticAndPara of fun1 (no further parameter): param
nonStaticWithPara of fun1 (parameter is received but ignored): caller
nonStaticWithPara of fun1 (parameter is received but ignored): caller
nonStaticWithPara of fun2 (parameter is received and used): param
nonStaticWithPara of fun2 (parameter is received and used): param

我在代码中留下了一些注释作为注释来解释一些基本逻辑。我希望你熟悉 lambda。

编辑:减少示例代码中的对象数量 EDIT2:更改 nonStaticFunc2 的工作方式(现在改为使用参数)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java构造函数是否返回Object引用?

来自分类Dev

如何在java8中定义没有args或返回值的函数?

来自分类Dev

cls()函数在类方法中做什么?

来自分类Dev

在Python中调用cls对象的构造函数

来自分类Dev

当值是cls的实例时,可以注释返回类型吗?

来自分类Dev

Java8:有没有办法从类方法引用中获取实例方法引用?

来自分类Dev

如何使公共MySQLDataReader CLS兼容?

来自分类Dev

是否可以调用Java中的VB CLS文件

来自分类Dev

如何清除php cli中的屏幕(如cls命令)

来自分类Dev

如何理解c ++函数中的返回引用?

来自分类Dev

从C ++中的函数返回引用

来自分类Dev

Java8中按值比较返回奇怪的结果

来自分类Dev

从函数返回的临时引用

来自分类Dev

如何获取函数返回类型的模板成员的解引用类型

来自分类Dev

如何获取函数返回类型的模板成员的解引用类型

来自分类Dev

C ++获取常量引用中按值返回的函数结果

来自分类Dev

如何在Java8中将List <Map <String,Object >>分组为Map <String,List <Map <String,Object >>

来自分类Dev

BertForSequenceClassification如何在CLS向量上分类?

来自分类Dev

在F#中编写符合CLS的代码

来自分类Dev

如何获取从函数中的数组返回的项目

来自分类Dev

如何获取从函数中的数组返回的项目

来自分类Dev

CLS 提高性能

来自分类Dev

如何在函数的返回类型中引用遵循协议的类?

来自分类Dev

如何在swift函数中返回inout(引用)?

来自分类Dev

EnumBuilder是否总是创建不符合CLS的枚举?如何使枚举CLS兼容?

来自分类Dev

EnumBuilder是否总是创建不符合CLS的枚举?如何使枚举CLS兼容?

来自分类Dev

如何引用从链接函数返回的promise?

来自分类Dev

如何引用函数的返回值?

来自分类Dev

函数返回对向量元素的引用

Related 相关文章

  1. 1

    Java构造函数是否返回Object引用?

  2. 2

    如何在java8中定义没有args或返回值的函数?

  3. 3

    cls()函数在类方法中做什么?

  4. 4

    在Python中调用cls对象的构造函数

  5. 5

    当值是cls的实例时,可以注释返回类型吗?

  6. 6

    Java8:有没有办法从类方法引用中获取实例方法引用?

  7. 7

    如何使公共MySQLDataReader CLS兼容?

  8. 8

    是否可以调用Java中的VB CLS文件

  9. 9

    如何清除php cli中的屏幕(如cls命令)

  10. 10

    如何理解c ++函数中的返回引用?

  11. 11

    从C ++中的函数返回引用

  12. 12

    Java8中按值比较返回奇怪的结果

  13. 13

    从函数返回的临时引用

  14. 14

    如何获取函数返回类型的模板成员的解引用类型

  15. 15

    如何获取函数返回类型的模板成员的解引用类型

  16. 16

    C ++获取常量引用中按值返回的函数结果

  17. 17

    如何在Java8中将List <Map <String,Object >>分组为Map <String,List <Map <String,Object >>

  18. 18

    BertForSequenceClassification如何在CLS向量上分类?

  19. 19

    在F#中编写符合CLS的代码

  20. 20

    如何获取从函数中的数组返回的项目

  21. 21

    如何获取从函数中的数组返回的项目

  22. 22

    CLS 提高性能

  23. 23

    如何在函数的返回类型中引用遵循协议的类?

  24. 24

    如何在swift函数中返回inout(引用)?

  25. 25

    EnumBuilder是否总是创建不符合CLS的枚举?如何使枚举CLS兼容?

  26. 26

    EnumBuilder是否总是创建不符合CLS的枚举?如何使枚举CLS兼容?

  27. 27

    如何引用从链接函数返回的promise?

  28. 28

    如何引用函数的返回值?

  29. 29

    函数返回对向量元素的引用

热门标签

归档