2016-04-07 35 views
2

我想了解一個使用lambda將對象返回到接口的引用變量的java程序。我想將lambda轉換爲簡單的java函數,但不知道如何去做。如何將Lambda轉換爲簡單的Java函數

的程序如下: -

public abstract class Performance implements Serializable 
{ 
Iterface_name vehicle =(Iterface_name & Serializable)() ->{return new Object();}; 
Object speed() 
{ 
    return vehicle.speed(); 
} 
} 

的界面如下: -

public interface Iterface_name 
{ 
Object speed(); 
} 

如何這個程序轉換成簡單的Java程序不使用拉姆達的學習。請幫忙。

回答

1

您可以用您自己實現的Iterface_name接口替換lambda表達式。

class Interface_name_impl implements Iterface_name { 
    @Override 
    public Object speed() { 
     return new Object(); 
    } 
} 

隨後,你可以替換使用與

Iterface_name vehicle = new Interface_name_impl(); 

lambda表達式,您甚至可以使用匿名類與您的發言明確有一個實現Iterface_name

Iterface_name vehicle1 = new Iterface_name() { 
    @Override 
    public Object speed() { 
     return new Object(); 
    } 
}; 

在上面的類一個不同的說明,你甚至可以簡單地從你的lambda使用

Iterface_name vehicle =(Iterface_name & Serializable)() ->{return new Object();}; 

Iterface_name vehicle =() -> new Object(); 

,甚至更短的版本是

Iterface_name vehicle = Object::new; 

在情況下,你想了解如何lambda表達式是由編譯器內部實現你可以通過Java-8-Lambdas-A-Peek-Under-the-Hood

+0

非常感謝Madhusudana。這真的很有幫助。我想問你,類型轉換(Iterface_name和Serializable)是否有所作爲,什麼是(&)在這裏做。 – ela

+0

@ela如果您同時使用'vehicle =(Iterface_name&Serializable)...',它允許我們將'vehicle'轉換爲上述類型之一。您可以在'vehicle'上使用'instanceof'操作符來測試相同的'而且這兩個都會返回true。無論如何,如果你不使用'(Iterface_name&Serializable)',它不能被串行化,而只能被稱爲'Iterface_name'。 –

+0

再次感謝。你給出的這個解釋清除了我的懷疑。我試圖在網上搜索正確的解釋,但沒有得到任何答案。非常感謝。 – ela

0

刪除該領域完全。這是一樣的:

public abstract class Performance implements { 
    Object speed() { 
     return new Object(); 
    } 
}