2008-08-02 24 views
61

Java uyarısı'un anlamı nedir?Belirli Java jenerik kalıplarında güvenlik uyarısı türünün anlamı nedir?

Tip güvenliği: Böyle olduğu gibi, genel bilgiler içeren bir türe bir nesne döküm çalıştığınızda Listesine Nesne dan dökme aslında

Ben bu uyarıyı almak sildim tip Listesi'nde karşı kontrol ediyor aşağıdaki kodu: Java aslında generics kullanan bir nesnede çalışma anında türü bilgilerini depolamak olmadığı için

Object object = getMyList(); 
List<Integer> list = (List<Integer>) object; 
+1

Eclipse'deki sarı alt çizgiden kurtulmak istiyorsanız, ancak '@ SuppressWarning 'eklemek istemiyorsanız, tercihlerde uyarıyı dikkate alma seçeneğine sahipsiniz. Tercihler penceresinde, _Java> Derleyici> Hatalar/Warnings_'a gidin, sonra _Generic types_ bölümünün altında, seçeneği işaretleyin ** İşaretlenmemiş jenerik tip işlemi ** yerine ** Ignore ** – Axel

cevap

50

Bu uyarı yoktur. Bu nedenle, object aslında bir List<String> ise, bir öğeye, değişkende tanımlanan jenerik türle eşleşmeyen listeden erişilinceye kadar çalışma zamanında ClassCastException olmayacaktır. Bu yanlış jenerik tür bilgileriyle listeye öğeler eklenirse, bu durum daha fazla karmaşıklığa neden olabilir. Listeye hala bir referans tutan ancak doğru jenerik tip bilgileri içeren herhangi bir kod artık tutarsız bir listeye sahip olacaktır.

uyarıyı kaldırmak için, deneyin:

List<?> list = (List<?>) object; 

Ancak, bir nesne eklemeye çalışıyorsanız derleyici bilmediği için böyle eklemek gibi bazı yöntemleri kullanmak mümkün olmayacaktır unutmayın yanlış tip. Yukarıdakiler çok sayıda durumda çalışacaktır, ancak eklemek veya benzer bir şekilde kısıtlanmış bir yöntem kullanmak zorundaysanız, Eclipse'deki (veya SuppressWarning ek açıklama) sarı alt çizgiden muzdarip olmanız gerekir.