Yani, aşağıdaki iki sınıfları:Sayı
Class A { }
Class B extends A { }
Class C extends A { }
Ve aşağıdaki yöntemi: Artık
public void foo(Collection<A> bar) {
List<A> listA = new ArrayList<>();
for(A a : bar) {
//a and anotherA are both of the same subtype of A
A anotherA = getAnotherA(a);
listA.add(anotherA);
}
bar.clear();
bar.addAll(listA);
}
, bunu aramaya çalışıyorum yöntem iki ayrı yol, ancak dökümün düzgün çalışmasını sağlayamıyorum ... Umarım sadece küçük bir şeye bakıyorum.
Yolu 1:
Yani, burada iki yolu bunu arıyorum olan
A obj = ...;
Field field = //get field representing a collection of sub-type of A
Collection<A> collection = field.get(...);
foo(collection);
yolu 2:
B obj = ...;
Set<C> setOfC = b.getSetOfC();
foo(setOfC);
Ben girişimleri döküm sayısız denedi, ama yapamıyorum derlemek için görünüyor! Örneğin, 2 yolunda setOfC
'u Set<A>
'a çevirmeyi denedim, ancak bir sınıf döküm istisnası alıyorum. bar
'u Collection<? extends A>
'a göndermeye çalıştım ancak bar.addAll (..) başarısız oluyor. Foo'ya jenerik eklemeyi denedim, ancak hatalar da aldım. Yol 1'de, collection
'u Collection<? extends A>
'a göndermeye çalıştım, ancak yine de şansım yok.
teşekkür gibi çoğu! Bunu doğru bir yaklaşım olacağını düşündüğümden daha önce denediğimi düşündüm, ama bir hatayı almayı hatırla. Sadece tekrar denedim ve işe yaradı! – user972276