Ссылка на метод Static - небольшой пример программы для совета - PullRequest
0 голосов
/ 27 августа 2018

Я застрял с этой программой ниже относительно одной вещи, и это ... Как значение "17" может попасть в метод isPrime, когда в методе numTest он разделен запятой, и я не могу найти какой-либо передачи этого значения "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."); 
  } 
}

1 Ответ

0 голосов
/ 27 августа 2018

numTest принимает IntPredicate и int.IntPredicate - это функциональный интерфейс, имеющий единственный метод, который принимает int и возвращает boolean.

MyIntPredicates::isPrime - это ссылка на метод, которая соответствует интерфейсу IntPredicate, и поэтому может быть передана в numTest.

numTest(MyIntPredicates::isPrime, 17) вызывает isPrime(17), вызывая p.test(v).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...