猿问

方法参考Static-小程序示例给建议

我在下面的这个程序中遇到了一件事,它是......当在方法 numTest 中它用逗号分隔时,值“17”如何到达方法 isPrime 并且我找不到这个值“17”的任何转移到这个方法?非常感谢你帮助我走得更远。任何人都可以向我解释价值“17”的运动吗?


// Demonstrate a method reference for a static method. 


// A functional interface for numeric predicates that operate 

// on integer values. 

interface IntPredicate { 

  boolean test(int n); 


// This class defines three static methods that check an integer 

// against some condition. 

class MyIntPredicates { 

  // A static method that returns true if a number is prime. 

  static boolean isPrime(int n) { 


    if(n < 2) return false; 


    for(int i=2; i <= n/i; i++) { 

      if((n % i) == 0)  

        return false; 

    } 

    return true; 

  } 


  // A static method that returns true if a number is even. 

  static boolean isEven(int n) { 

    return (n % 2) == 0; 

  } 


  // A static method that returns true if a number is positive. 

  static boolean isPositive(int n) { 

    return n > 0; 

  } 

}     


class MethodRefDemo { 


  // This method has a functional interface as the type of its 

  // first parameter. Thus, it can be passed a reference to any 

  // instance of that interface, including one created by a 

  // method reference. 

  static boolean numTest(IntPredicate p, int v) { 

    return p.test(v); 

  } 


  public static void main(String args[]) 

  { 

    boolean result; 


    // Here, a method reference to isPrime is passed to numTest(). 

    result = numTest(MyIntPredicates::isPrime, 17); 

    if(result) System.out.println("17 is prime."); 


    // Next, a method reference to isEven is used. 

    result = numTest(MyIntPredicates::isEven, 12); 

    if(result) System.out.println("12 is even.");  


    // Now, a method reference to isPositive is passed. 

    result = numTest(MyIntPredicates::isPositive, 11); 

    if(result) System.out.println("11 is positive."); 

  } 

}



catspeake
浏览 161回答 1
1回答

月关宝盒

numTest接受 anIntPredicate和 an&nbsp;int。AnIntPredicate是一个函数式接口,具有一个接受 anint并返回 a 的方法boolean。MyIntPredicates::isPrime是与IntPredicate接口匹配的方法引用,因此可以传递给numTest.numTest(MyIntPredicates::isPrime, 17)调用isPrime(17)通过调用p.test(v)。
随时随地看视频慕课网APP

相关分类

Java
我要回答