Czy istnieje sposób wymuszenia typu zwracanego przez Arrays.asList
Mam metodę zwracającą kolekcję klasy podstawowej:
import java.util.*;
class Base { }
class Derived extends Base { }
Collection<Base> getCollection()
{
return Arrays.asList(new Derived(),
new Derived());
}
To się nie kompiluje, jak typ powrotuArrays.asList
(List<Derived>
) nie odpowiada typowi powrotu metody (Collection<Base>
). Rozumiem, dlaczego tak się dzieje: ponieważ typy ogólne są różne, obie klasy nie są powiązane dziedziczeniem.
Istnieje wiele sposobów naprawienia błędu kompilatora, polegającego na zmianie typu powrotu metody na nieużywanie Arrays.asList do rzutowania jednego z pochodnych obiektów na Base.
Czy istnieje sposób, aby nakazać kompilatorowi użycie innego, ale zgodnego typu, gdy rozwiąże typ ogólny dla wywołania Arrays.asList? (Ciągle próbuję wykorzystać ten wzór i napotykać na ten problem, więc jeśli istnieje sposób, aby to działało, chciałbym to wiedzieć.)
Myślałem, że możesz zrobić coś takiego
Collection<Base> getCollection()
{
return Arrays.asList<Base>(new Derived(),
new Derived());
}
Kiedy próbuję to skompilować (java 6), kompilator skarży się, że oczekuje przecinka „)”.