Я думав, що анонімні класи в основному схожі на лямбда, але з гіршим синтаксисом ... це виявляється правдою, але синтаксис ще гірший і спричиняє (що має бути) локальні змінні кровоточити в клас, що містить.
Ви можете отримати доступ до жодної остаточної змінної, ввівши їх у поля батьківського класу.
Напр
Інтерфейс:
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
локальні змінні з методу вкладу.