我以爲匿名類基本上是一樣的lambda但語法糟糕的......這原來是真實的,但語法還差和原因(應該是什麼)局部變量滲出到包含類。
您可以通過將它們放入父類的字段來訪問最終的變量。
如
接口:
public interface TextProcessor
{
public String Process(String text);
}
類:
private String _key;
public String toJson()
{
TextProcessor textProcessor = new TextProcessor() {
@Override
public String Process(String text)
{
return _key + ":" + text;
}
};
JSONTypeProcessor typeProcessor = new JSONTypeProcessor(textProcessor);
foreach(String key : keys)
{
_key = key;
typeProcessor.doStuffThatUsesLambda();
}
我不知道他們是否已經在Java 8整理了這一點(我被困在EE世界,而不是得到8)但在C#它看起來像這樣:
public string ToJson()
{
string key = null;
var typeProcessor = new JSONTypeProcessor(text => key + ":" + text);
foreach (var theKey in keys)
{
key = theKey;
typeProcessor.doStuffThatUsesLambda();
}
}
你不需要在c#中的獨立接口...我想念它!我發現自己在java中進行更糟糕的設計並重復自己,因爲在Java中添加重複使用某些代碼+複雜性比複製和粘貼大量時間要糟糕。
你可以從封閉方法引用'final'局部變量。 – 2011-02-24 16:05:47
我的確喜歡Adam Mmlodzinski建議定義一個私有方法,該私有方法初始化私有myVariable實例,並且可以因爲返回'this'而在右括號處被調用。 – dlamblin 2013-02-21 04:22:41
這個問題有一些共同的目標:http://stackoverflow.com/questions/362424/accessing-constructor-of-an-anonymous-class – 2013-04-18 09:20:41