我以为匿名类基本上是一样的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