Java 8'in yeni akışlarını içeren bir proje üzerinde çalışırken, bir akışta Stream#toArray()
'u aradığımda, T[]
yerine Object[]
döndürdüğünü fark ettim. Olduğum gibi, Java 8'in kaynak koduna girmeye başladım ve Object[] toArray();
'u neden T[] toArray();
olarak kullanmadıklarını bulamadım. Bunun arkasında herhangi bir muhakeme var mı, yoksa sadece bir tutarlılık mı?Yeni Java 8 akışları neden bir Array Dizisi'ni Array aramalarına döndürüyor?
DÜZENLEME 1: Bir çok insanın bunun mümkün olmayacağını söyleyen yanıtlarda farkettim, ancak bu kod pasajı beklenen sonucu derleyip geri getiriyor?
import java.util.Arrays;
public class Test<R> {
private Object[] items;
public Test(R[] items) {
this.items = items;
}
public R[] toArray() {
return (R[]) items;
}
public static void main(String[] args) {
Test<Integer> integerTest = new Test<>(new Integer[]{
1, 2, 3, 4
});
System.out.println(Arrays.toString(integerTest.toArray()));
}
}
R'yi nasıl bilebilir? Belirli türlerin döndürülmesini istiyorsanız, bir jeneratöre yönteme geçin. Örneğin, bir String dizisi için aşağıdakileri yapın: 'streamString.toArray (String [] :: new)' – meskobalazs
'R', Akış arabiriminin type parametresidir. Soruma "R" kullandım, ama "T" olmalı. Bunu günceller. – Martijn
@meskobalazs Ancak yine de, en kötü durum senaryosunu istediğiniz türe çevirebilirsiniz. Yazılan yol yerine neden joker yolunu seçmeyi tercih ettiler? Bazen, programcıya hangi tip akışın böyle bir durumda sahip olduğunu bilmediğini, en iyi kod için geçerli olmadığını hissediyorum. Ve akım hala tam olarak ne tür içerdiğini bilen biridir. – Martijn