+1 امتیاز
قبل در برنامه نویسی توسط (1.1هزار امتیاز)

زبان برنامه نویسی جاوا ساختاری برای پشتیبانی از مفهوم Closure دارد؟

1 پاسخ

+2 امتیاز
قبل توسط (2.2هزار امتیاز)
ویرایش شده قبل توسط

بله .این قابلیت که نوعی syntax خاص است از جاوا 7 به بعد پشتیبانی میشود .

 

  public class SimpleClosure {
  
    public static void main(String[] args) {
      // function with no arguments; return value is always 42
      int answer = { => 42 }.invoke();
      System.out.println(answer);
    }
  
  }
  

//A closure with one argument:

  double log = { double x => Math.log(x) }.invoke(10);
  

//A closure with a statement:

  // this will print "31 is odd" and return 15
  int half = { 
    int x => 
    if (x % 2 != 0) System.out.printf("%d is odd%n", x); x / 2
  }.invoke(31);
  

//A closure with two arguments:

  int sum = { int x, int y => x + y }.invoke(3, 4);  // will return 7
  

//A closure does not have to return any value (the function may have return type void):

  { char c => System.out.println(c); }.invoke('@');  // will print @
  

//A closure that returns a string:

  String reversed = { 
    String s => 
    new StringBuilder(s).reverse().toString()
  }.invoke("abcd");  // will return "dcba"
  

//A closure that returns an instance of Runnable.

  { => new Runnable() {
      public void run() {
        System.out.println("hi from Prague");
      }
    }
  }.invoke().run();  // invoke() returns an instance of Runnable and we 
                     // call run() on it immediately
  

//We can declare local variables in closures:

  { int n => 
    int m = n + 1; System.out.println(m * m); 
  }.invoke(3);  // will print 16
  

 

قبل توسط (1.1هزار امتیاز)
قابلیت Closure در فالب lambda expression در JDK 8 اضافه خواهد شد و قرار بود که در JDK 7 اضافه بشه که با تصمیم ناگهانی شرکت اوراکل منتفی شد.

سوالات مشابه

0 امتیاز
0 پاسخ 619 بازدید
0 امتیاز
1 پاسخ 2.0هزار بازدید
0 امتیاز
1 پاسخ 266 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
0 امتیاز
1 پاسخ 130 بازدید
+1 امتیاز
1 پاسخ 821 بازدید
...