Mam metoda przekazujących kolekcję klasy bazowej:Czy istnieje sposób, aby wymusić typ zwracanej Arrays.asList
import java.util.*;
class Base { }
class Derived extends Base { }
Collection<Base> getCollection()
{
return Arrays.asList(new Derived(),
new Derived());
}
To nie skompilować, jak typ powrót Arrays.asList
(List<Derived>
) robi nie pasuje do typu zwrotu metody (Collection<Base>
). Rozumiem, dlaczego tak się dzieje: ponieważ typy ogólne są różne, te dwie klasy nie są powiązane przez dziedziczenie.
Istnieje wiele sposobów na naprawienie błędu kompilatora poprzez zmianę typu zwracanego metody, aby nie używać pola Arrays.asList do rzutowania jednego z obiektów pochodnych na składnik Base.
Czy istnieje sposób, aby kompilator mógł użyć innego, ale kompatybilnego typu, gdy rozpatruje typ ogólny dla wywołania Arrays.asList? (Ciągle stara się wykorzystać ten wzór i działa w ten problem, więc jeśli istnieje sposób, aby to działało, chciałbym to wiedzieć.)
Myślałem, że można zrobić coś takiego
Collection<Base> getCollection()
{
return Arrays.asList<Base>(new Derived(),
new Derived());
}
Kiedy próbuję to skompilować (Java 6), kompilator narzeka, że spodziewa się ")" przy przecinku.
Tablice. asList –