我认为匿名类基本上类似于 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 中添加大量代码+复杂性才能重用某些东西,这比仅仅复制和粘贴很多时间还要糟糕。