Aşağıdaki kodu çalıştırmak, Bad type on operand stack
hata iletisiyle sonuçlanır.İşlenen yığınında hatalı tip ... jdk 8 kullanılarak, anonim iç sınıflara sahip lambeler başarısız, neden?
public static void main(String args[]) {
TransformService transformService = (inputs) -> {
return new ArrayList<String>(3) {{
add("one");
add("two");
add("three");
}};
};
Collection<Integer> inputs = new HashSet<Integer>(2) {{
add(5);
add(7);
}};
Collection<String> results = transformService.transform(inputs);
System.out.println(results.size());
}
public interface TransformService {
Collection<String> transform(Collection<Integer> inputs);
}
Ancak beklendiği gibi kod çalışmasına olanak tanır: Lamda içinde çift ayracı başlatma (anonim iç sınıflar) çıkarmadan, neden? Aşağıdaki işler:
public class SecondLambda {
public static void main(String args[]) {
TransformService transformService = (inputs) -> {
Collection<String> results = new ArrayList<String>(3);
results.add("one");
results.add("two");
results.add("three");
return results;
};
Collection<Integer> inputs = new HashSet<Integer>(2) {{
add(5);
add(7);
}};
Collection<String> results = transformService.transform(inputs);
System.out.println(results.size());
}
public interface TransformService {
Collection<String> transform(Collection<Integer> inputs);
}
}
Derleyici hata? Ne de olsa erken erişim sürümü ...
(son jdk 8 lambda download olmadığı sürece bu derleme olmayacaktır.)
Etiket lambda, C#, C++ gibi Java dışındaki diller içindir. – Lion
@Lion: Java 8'in lambdaları uyguladığına inanıyorum (hiç kullanmadım, bu yüzden bir gerçeği bilmiyorum), ve bu etiket bu soru için uygun gibi görünüyor. –
@Lion, bu sadece Java'nın daha önce lambda yapmamış olması. Bir lambda, dilin bir alfa sürümünde olsa bile, bir lambdadır. –