Мислех, че анонимните класове са основно като ламбда, но с по-лош синтаксис... това се оказва вярно, но синтаксисът е още по-лош и кара (какво трябва да бъде) локалните променливи да изтичат в съдържащия клас.
Можете да получите достъп до безкрайни променливи, като ги направите в полета на родителския клас.
Eg
Интерфейс:
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, за да използвате повторно нещо, е по-лошо от просто копиране и поставяне през много време.
person
JonnyRaa
schedule
09.09.2014
final
локални променливи от обхващащия метод. - person Tom Hawtin - tackline   schedule 24.02.2011this
. - person dlamblin   schedule 21.02.2013