I have a method returning a collection of a base class:
import java.util.*;
class Base { }
class Derived extends Base { }
Collection<Base> getCollection()
{
return Arrays.asList(new Derived(),
new Derived());
}
This fails to compile, as the return type of Arrays.asList
(List<Derived>
) does not match the return type of the method (Collection<Base>
). I understand why that happens: since the generic types are different, the two classes are not related by inheritance.
There are many ways to fix the compiler error from changing the return type of the method to not using Arrays.asList to casting one of the derived objects to Base.
Is there a way to tell the compiler to use a different but compatible type when it resolves the generic type for the Arrays.asList call? (I keep trying to use this pattern and running into this problem, so if there is a way to make it work, I would like to know it.)
I thought that you could do something like
Collection<Base> getCollection()
{
return Arrays.asList<Base>(new Derived(),
new Derived());
}
When I try to compile that (java 6), the compiler complains that it is expecting a ')' at the comma.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…