为了账号安全,请及时绑定邮箱和手机立即绑定

*Java 8中的(双冒号)运算符

*Java 8中的(双冒号)运算符

HUX布斯 2019-06-06 15:35:59
*Java 8中的(双冒号)运算符我当时正在探索Java 8源代码,发现这个特定的代码部分非常令人惊讶://defined in IntPipeline.java@Overridepublic final OptionalInt reduce(IntBinaryOperator op) {     return evaluate(ReduceOps.makeInt(op));}@Overridepublic final OptionalInt max() {     return reduce(Math::max); //this is the gotcha line}//defined in Math.javapublic static int max(int a, int b) {     return (a >= b) ? a : b;}是Math::max类似于方法指针的东西?正常人static方法转换为IntBinaryOperator?
查看完整描述

3 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

是的,那是真的。这个::运算符用于方法引用。所以,我们可以提取静态通过使用它或对象中的方法从类中获取的方法。即使对于构造函数,也可以使用相同的运算符。这里提到的所有情况都在下面的代码示例中得到了举例说明。

Oracle的官方文档可以找到这里.

您可以更好地了解jdk 8的更改。这,这个文章。在方法/构造器引用还提供了一个代码示例:

interface ConstructorReference {
    T constructor();}interface  MethodReference {
   void anotherMethod(String input);}public class ConstructorClass {
    String value;

   public ConstructorClass() {
       value = "default";
   }

   public static void method(String input) {
      System.out.println(input);
   }

   public void nextMethod(String input) {
       // operations
   }

   public static void main(String... args) {
       // constructor reference
       ConstructorReference reference = ConstructorClass::new;
       ConstructorClass cc = reference.constructor();

       // static method reference
       MethodReference mr = cc::method;

       // object method reference
       MethodReference mr2 = cc::nextMethod;

       System.out.println(cc.value);
   }}


查看完整回答
反对 回复 2019-06-06
  • 3 回答
  • 0 关注
  • 1372 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信