2016-04-19 7 views
0

Недавно я смотрел учебник http://winterbe.com/posts/2015/04/07/java8-concurrency-tutorial-thread-executor-examples/, и он использует следующий синтаксис.Синтаксис Java "... =() -> {...}"

Runnable task =() -> { 
    String threadName = Thread.currentThread().getName(); 
    System.out.println("Hello " + threadName); 
}; 

task.run(); 

Thread thread = new Thread(task); 
thread.start(); 

System.out.println("Done!"); 

я вычитаются, что вместо того, чтобы использовать «... = ->() {...}», который я полностью не понимаю (не нашли какой-либо документации, связанной с этим синтаксисом) я мог бы создать класс следующим образом:

public class IAmRunnable1 implements Runnable { 

    @Override 
    public void run() { 
    String threadName = Thread.currentThread().getName(); 
    System.out.println("Hello " + threadName); 

    } 

} 

И использовать этот класс в своем коде, как показано ниже:

//ref:http://winterbe.com/posts/2015/04/07/java8-concurrency-tutorial-thread-executor-examples/ 
public class ExecutorRunnableExample { 

    public static void main(String[] args) { 

    Runnable task = new IAmRunnable1(); 

    task.run(); 

    Thread thread = new Thread(task); 
    thread.start(); 

    System.out.println("Done!"); 

    } 

} 

Может кто-то направить меня к документации, связанной с этим синтаксисом или дать мне соответствующее объяснение.

Спасибо!

+0

Поиск лямбда-выражений (введен в Java 8) – Eran

+0

Я действительно думаю, что Java8 уничтожил стандарты программирования. – Hackerdarshi

ответ

4

Это синтаксис для Java 8 lambdas. По сути:

Runnable r =() -> { ... } 

такая же, как

Runnable r = new Runnable() { public void run() { ... } } 
+0

Обратите внимание, что вы можете использовать только lambdas с «функциональными интерфейсами». Эти интерфейсы будут иметь только один метод. т. е. единственным методом Runnable является 'run()', поэтому это то, что вызывается. –

+0

Итак, в '() -> {...}' what '()' представляет? Аргументы Мне нужно перейти к 'new Runnable' или аргументам' run() '? – Pshemo

+0

() - аргументы, переданные методу; в этом случае run() не принимает аргументов. См. Документацию на языке Java 8 для полных синтаксических правил. – AlBlue