Re: Casting a Generic List
On Apr 26, 8:11 am, Bryan <BTRichard...@gmail.com> wrote:
Hello all,
Is it possible to cast an entire Generic List somehow? For example,
say I have the following:
public interface Foo {
.....
}
public class Bar implements Foo {
....
}
public class Test {
public List<Foo> getFooList() { .... }
public static void main(String[] args) {
Test test = new Test();
List<Bar> bars = test.getFooList(); // illegal
}
}
Now assume that all the objects in the FooList were indeed
instantiated as Bar objects.
I get a compile error saying it can't convert from List<Foo> to
List<Bar>. I could always just get a list of Foo objects and cast
them to Bars myself, but I'm just wondering if it can be done for me
all at once.
Any suggestions?
If you know that every Foo in the foo list is a Bar, then the only way
to get a List<Bar> object is to copy all elements from one to the
other, casting as you go.
You can "cheat", but you'd likely introduce bugs. List<Bar> bars
=(List<Bars>)(List)foos;
In general, don't do this.
This brings up the point. If you know that every Foo in a list is a
Bar, why not start with a List<Bar> instead of List<Foo>
Even if you don't know that before a class is instantiated, there are
ways around it.
class FooHolder<T extends Foo> {
private List<T> list;
// ...
public List<T> getFoos() {
return list;
}
public static void main(String...args) {
FooHolder<Bar> fh = new FooHolder<Bar>();
// Look ma, no casting!
List<Bar> bars = fh.getFoos();
}
}