2015-04-21 18 views
5

Ben Oracle'ın lambda ifadesi öğreticiler birinin içinden okuma ve aşağıdaki kodu karşıdan karşıya geldi: sınıf oluştururkenBaşlatma sırasında bir arabirim uygulayabilir misiniz?

public class RunnableTest { 
    public static void main(String[] args) { 

    System.out.println("=== RunnableTest ==="); 

    // Anonymous Runnable 
    Runnable r1 = new Runnable(){ 

    @Override 
    public void run(){ 
     System.out.println("Hello world one!"); 
    } 
    }; 

    // Lambda Runnable 
    Runnable r2 =() -> System.out.println("Hello world two!"); 

    // Run em! 
    r1.run(); 
    r2.run(); 
    } 
} 

Sorum

http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html neden Runnable uygulamak vermedi edilir? R1'i başlatırken çalıştırma yöntemini geçersiz kıldıkları için, bu uygulama ile ilgileniyor muydu?

+1

İnanıyorum ki, size sunulan çeşitli seçenekleri göstermek için yaptıkları bir öğretici bağlamında olduğunu düşünün. – CalebB

cevap

2

Evet, buna Java'da anonim bir sınıf denir.

https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html

Sen bir arabirim uygulamak ya da zaman tanımlamak isimsiz alt sınıfının yeni bir örneğini oluşturur new operatörü, kullanırken bir sınıf uzatabilir. Daha çok, yalnızca bir örneği aldığınızdan, başka bir iş parçacığında veya geri aramada kullanılmak üzere kod yazarken kullanılır.

Java 8'deki yeni lambda sözdizimi, arabirimler için Anonim sınıfları, Runnable veya java.util.function'daki arabirimler gibi tek bir yöntemle değiştirir. Örnekte gösterdikleri şey budur.

İlgili konular