Reputation: 189626
If I have this class:
class Foo<T> implements SomeInterface
{
final private List<T> list = new ArrayList<T>();
final private Class<? extends T> runtimeClass;
public Foo(Class<? extends T> cl) { this.runtimeClass = cl; }
// method override from SomeInterface
@Override public boolean addChild(Object o)
{
// Only add to list if the object is an acceptible type.
if (this.runtimeClass.isInstance(o))
{
list.add( /* ??? how do we cast o to type T??? */ );
}
}
public List<T> getList()
{
return this.list;
} // yes, I know, this isn't safe publishing....
}
how would I perform a runtime cast from Object to type T?
Upvotes: 2
Views: 1647
Reputation: 82096
// method override from SomeInterface
@Override public boolean addChild(Object o)
{
// Only add to list if the object is an acceptible type.
if (this.runtimeClass.isInstance(o))
{
list.add((T)o);
}
}
Upvotes: 1
Reputation: 308001
Use this:
list.add(this.runtimeClass.cast(o))
See Class.
cast()
for details
Upvotes: 6