2014-09-15 105 views
8

Ben Eylem yeni yayımlanan Java 8 okuma ve derleme değil Bölüm 5 yapıştırılan kodu parçasıdır var bulunursam:Bu java 8 örneği, tür çıkarımını kullanarak Eclipse'de derlemedi?

List<Integer> numbers1 = Arrays.asList(1, 2, 3); 
    List<Integer> numbers2 = Arrays.asList(3, 4); 
    List<int[]> pairs = 
    numbers1.stream() 
    .flatMap((Integer i) -> numbers2.stream() 
    .map(j -> new int[]{i, j}) 
    ) 
    .collect(toList()); 

Eclipse diyor ki:

: "Tür uyumsuzluğu List<Object> den List<int[]> dönüştürmek olamaz"

Ve yazar Github verdiklerinden karşılaştırdıktan sonra, derlenmiş aşağıdaki:

List<Integer> numbers1 = Arrays.asList(1, 2, 3); 
    List<Integer> numbers2 = Arrays.asList(3, 4); 
    List<int[]> pairs = 
    numbers1.stream() 
    .flatMap((Integer i) -> numbers2.stream() 
    .map((Integer j) -> new int[]{i, j}) 
    ) 
    .collect(toList()); 

tek değişiklik için "j" "(tamsayı j)" değil.

Ancak Java 8 tarafından sağlanan sözdizimi şeker ile ilk tamamen eşdeğer ilk sürümü değil mi? Java neden derlemeyi reddediyor?

Teşekkür

BTW

:

java -version 
java version "1.8.0_20" 
Java(TM) SE Runtime Environment (build 1.8.0_20-b26) 
Java HotSpot(TM) Client VM (build 25.20-b23, mixed mode) 
+0

* Argh * bu bir kitapta basılmıştır? – tilois

+0

Tamamen değil. Soruyu açıklığa kavuşturmak için biraz değiştirildi. –

+0

Başlığın, kök nedeninin Eclipse'de olduğunu yansıtacak şekilde düzenlenmiş. –

cevap

15

İlk olarak, terminoloji düzeltme: Eğer sözdizimi şeker derken, ne gerçekten Sorduğunuz sorulduğunda bir anlaması için o, tür kesmesi olduğunu iç lambdada j için, derleyicinin doğru türden gelmemesi için yazın.

İkincisi, verilerinizi düzeltin: Yorum yazdığınız hata iletileri JDK derleyicisinden gelmiyor; Eclipse'den geliyorlar.

Bu yalnızca bir Eclipse hatasıdır. Referans derleyici (Oracle JDK'dan javac) ilk örneğinizi ele alır.

+2

+1 ve başka bir tanılama biti ekleyerek: "Stream çiftleri = numbers1.stream(). FlatMap (i -> numbers2.stream(). Map (j -> new int [] {i, j})); iyi derler, bu yüzden sadece son adım ('.collect()') çıkarımın başarısız olduğu yerdir. –

+0

Sadece Eclipse hakkında olduğunu doğruladı. javac sınıf dosyasını iyi oluşturdu. Teşekkürler/ –

+0

Bu Lambdas ile güzel oynamak için nasıl Eclipse almak için herhangi bir kelime? – Yoshiya