4

I am stuck with this program below regarding one thing and it is... How can value "17" get to method isPrime when in method numTest it is separated by comma and I can´t find any transfer of this value "17" to this method? Thank you much for helping me move further. Can anybody explain me pls movement of value "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."); 
  } 
}

1 Answer 1

2

numTest accepts an IntPredicate and an int. An IntPredicate is a functional interface having a single method that takes an int and returns a boolean.

MyIntPredicates::isPrime is a method reference that matches the IntPredicate interface, and therefore can be passed to numTest.

numTest(MyIntPredicates::isPrime, 17) invokes isPrime(17) by calling p.test(v).

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.