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 „)”.

questionAnswers(1)

yourAnswerToTheQuestion