Dalam cuplikan Java:
SyndFeedInput fr = new SyndFeedInput();
SyndFeed sf = fr.build(new XmlReader(myInputStream));
List<SyndEntry> entries = sf.getEntries();
baris terakhir menghasilkan peringatan
"Ekspresi tipe List
perlu konversi yang tidak dicentang untuk menyesuaikan dengan List<SyndEntry>
"
Apa cara yang tepat untuk memperbaikinya?
sumber
Ini adalah masalah umum ketika berhadapan dengan API 5 pra-Jawa. Untuk mengotomatiskan solusi dari erickson , Anda dapat membuat metode generik berikut:
Ini memungkinkan Anda untuk melakukan:
Karena solusi ini memeriksa bahwa elemen-elemen tersebut memang memiliki tipe elemen yang benar dengan menggunakan gips, itu aman, dan tidak memerlukan
SuppressWarnings
.sumber
Sepertinya
SyndFeed
tidak menggunakan obat generik.Anda bisa memiliki pemain yang tidak aman dan penindasan peringatan:
atau hubungi Collections.checkedList - meskipun Anda masih harus menekan peringatan:
sumber
Collections.checkedList
akan mencegah penambahan elemen non-SyndEntry nanti. Saya pribadi tidakcheckedList
banyak menggunakan , tetapi saya juga tidak sering masuk ke dalam situasi pemeran yang tidak diperiksa ini ...Apakah Anda menulis
SyndFeed
?Apakah
sf.getEntries
mengembalikan Daftar atauList<SyndEntry>
? Dugaan saya adalah ia kembaliList
dan mengubahnya untuk kembaliList<SyndEntry>
akan memperbaiki masalah.Jika
SyndFeed
merupakan bagian dari perpustakaan, saya pikir Anda tidak dapat menghapus peringatan tanpa menambahkan@SuppressWarning("unchecked")
anotasi ke metode Anda.sumber
SyndFeed
berasal dari rometools.github.io/rome/ROMEReleases/ROME1.0Release.html . Masalahnya tampaknya diperbaiki di versi Roma yang lebih baru seperti yang ditemukan di mvnrepository.com/artifact/com.rometools/rome/1.9.0Jika Anda menggunakan Guava dan semua yang ingin Anda lakukan adalah beralih melalui nilai-nilai Anda:
Jika Anda membutuhkan Daftar aktual yang dapat Anda gunakan
atau
sumber
sumber
Jika Anda melihat javadoc untuk kelas
SyndFeed
(saya kira Anda merujuk ke kelascom.sun.syndication.feed.synd.SyndFeed
), metode getEntries () tidak kembalijava.util.List<SyndEntry>
, tetapi mengembalikan hanyajava.util.List
.Jadi, Anda perlu pemeran eksplisit untuk ini.
sumber
Jika Anda tidak ingin memasukkan @SuppressWarning ("tidak dicentang") pada setiap panggilan sf.getEntries (), Anda selalu dapat membuat pembungkus yang akan mengembalikan Daftar.
Lihat pertanyaan lain ini
sumber
Lebih mudah lagi
return new ArrayList<?>(getResultOfHibernateCallback(...))
sumber