Bu tür şeyleri nasıl çalıştırabilirim? (obj instanceof List<?>)
'un olup olmadığını kontrol edebilirim ancak (obj instanceof List<MyType>)
. Bunun bir yolu var mı?Liste Insignceof <MyType> nasıl?
cevap
Bu, jeneriklerin derleme zamanında veri türü silinmesi nedeniyle mümkün değildir.
public class GenericList <T> extends ArrayList<T>
{
private Class<T> genericType;
public GenericList(Class<T> c)
{
this.genericType = c;
}
public Class<T> getGenericType()
{
return genericType;
}
}
tamam kontrol etmek için alternatif bir yol var mı? –
Teşekkürler, sanırım genel türü, her iki öğeyi de kontrol etmek ve kontrol etmek için çağırdığım işleve ileteceğim. –
Muhtemelen kontrol etmek bunların türlerini almak için yansıma kullanmak gerekir: Bunu yapmanın tek mümkün yolu liste tutan tip tutan sarıcı çeşit yazmaktır. Listesinin tipini almak için: Nesne bir Liste veya Harita değerin bir referans bir Koleksiyonu örneğidir ise doğruluyorsanız Get generic type of java.util.List
Bildiğim kadarıyla, bu yalnızca alanlar için çalışıyor, ama sözünü belirtmek için +1. –
if(!myList.isEmpty() && myList.get(0) instanceof MyType){
// MyType object
}
... ve boş bir liste için? Yansımalar? – Gewure
Yeap. Boş liste için mevcut olan tek seçenek budur. https://stackoverflow.com/questions/1942644/get-generic-type-of-java-util-list – Sathish
Bu yanıt güvenli değildir, çünkü 0 öğesi bir MyType olsa bile, diğer öğeler başka türde olabilir . Örneğin, liste ArrayList
, sadece gerekli listesi örneğini oluşturmak ve almak onun sınıf ... Bu ise
Set<Object> setOfIntegers = new HashSet(Arrays.asList(2, 4, 5));
assetThat(setOfIntegers).instanceOf(new ArrayList<Integer>().getClass());
Set<Object> setOfStrings = new HashSet(Arrays.asList("my", "name", "is"));
assetThat(setOfStrings).instanceOf(new ArrayList<String>().getClass());
"setOfIntegers" ve "setOfStrings" inizin anlamı nedir? – DanielM
@DanielM sadece örneği güncelledi. Bu referansları kullanıyor olmalı! Teşekkürler! –
(Martijn cevabı @) o (ilk öğenin tip hiçbir şey garanti kontrol) gereksiz liste iterasyon önlemek için döküm olmadan geçmek daha iyidir jenerik ile sarılmış edilemez. Her öğeyi, listeyi yinelediğimiz kod parçasına atayabiliriz.
Object attVal = jsonMap.get("attName");
List<Object> ls = new ArrayList<>();
if (attVal instanceof List) {
ls.addAll((List) attVal);
} else {
ls.add(attVal);
}
// far, far away ;)
for (Object item : ls) {
if (item instanceof String) {
System.out.println(item);
} else {
throw new RuntimeException("Wrong class ("+item .getClass()+") of "+item);
}
}
yerine instanceof kullanmanın birçok yöntemlerini içerecek şekilde sahte fabrika kullanabilirsiniz: Eğer object
olmadığını kontrol etmek istiyorsanız
public class Message1 implements YourInterface {
List<YourObject1> list;
Message1(List<YourObject1> l) {
list = l;
}
}
public class Message2 implements YourInterface {
List<YourObject2> list;
Message2(List<YourObject2> l) {
list = l;
}
}
public class FactoryMessage {
public static List<YourInterface> getMessage(List<YourObject1> list) {
return (List<YourInterface>) new Message1(list);
}
public static List<YourInterface> getMessage(List<YourObject2> list) {
return (List<YourInterface>) new Message2(list);
}
}
Bu kullanılabilecek boş değil, hangi List<T>
örneği geçerli:
if(object instanceof List){
if(((List)object).size()>0 && (((List)object).get(0) instanceof MyObject)){
// The object is of List<MyObject> and is not empty. Do something with it.
}
}
- 1. Liste <?> vs Liste <? Nesne>
- 2. Liste <T>
- 3. DataTable Liste <object>
- 4. dönüştürme Liste <String>
- 5. Liste <String, Int32, Int32> (çok boyutlu genel liste)
- 6. Genel liste oluştur <T> yansımasıyla
- 7. C# Liste <> GroupBy 2 Değerleri
- 8. Java sözlüğü <String, Liste <Object>>
- 9. Liste <object> Listeleme <T> Yansıma
- 10. Liste <int> Nhibernate Criteria
- 11. Liste <string> INotifyPropertyChanged event
- 12. Liste <T> temizlendi sorunu
- 13. İki Liste <string>'dan farklı değerler nasıl alınır?
- 14. Liste <T>'un başlangıcına nasıl öğe eklenir?
- 15. Liste Oluşturma <> runtime türünden
- 16. Şekillendirici <select> mobiles liste seçenekleri
- 17. Hazırda Beklet, Liste <String>
- 18. İki Liste arasındaki fark <FileInfo>
- 19. Liste <String> addAll() yöntemi eklenmiyor
- 20. Dinamik Liste <T> tür
- 21. iPhone Safari:</p> <p>Ben kaydırılabilir liste (iPhone SDK Pano Liste) nasıl yapabilirim içeride:
- 22. Liste ve alt liste -android nasıl oluşturulur?
- 23. Convert List <MyObject> - Sözlük <object.string, Liste <obj.ID>>
- 24. Liste <string> Listesinin <int> Listesini Nasıl Dönüştürülür?
- 25. Liste <T> veya Dictionary <T,T2>, C# WinRT bileşeninde nasıl kullanılır
- 26. Genel bir liste <MyClass> IList <System.Type> nasıl dönüştürülür?
- 27. Çoğaltmalar bir <a0></ a0> düğmesiyle bir liste kutusunda nasıl görüntüleyebilirim? #
- 28. Liste kutusu nasıl kullanılır?
- 29. Haritadan liste nasıl farklıdır?
- 30. Boş liste nasıl başlatılır?
Bkz http://docs.oracle.com/javase/tutorial/java/generics/erasure.html parameteri karşı kontrol instanceof işlemi gerçekleştirilemiyor [ait –
olası yinelenen zed type ArrayList] (http://stackoverflow.com/questions/7335018/cannot-perform-instanceof-check-against-parameterized-type-arraylistfoo) –