I have an abstract class with generic (T1) that extends my Filterable interface:
public abstract class AbstractAdapter < T1 extends Filterable, T2 extends AbstractAdapter.Cell > extends ArrayAdapter < T1 > {
public abstract class Cell {
public T1 info;
//...
}
public abstract void setData(T2 cell, int position);
//...
}
And i have concrete class with method (setData) and Cell class implementations:
public class ConcreteAdapter extends AbstractAdapter < InfoClass, ConcreteAdapter.Cell > {
public class Cell extends AbstractAdapter.Cell {
//...
}
@Override
public void setData(Cell cell, int position) {
InfoClass info = (InfoClass)cell.info; // need to cast from Filterable to InfoClass (why?). Or i have compilation error
}
//...
}
So, i have ConcreteAdapter class with first generic class as InfoClass (that extends Filterable), in method setData i have Cell class object, but field "info" i see just as Filterable, not InfoClass. I think, field "info" already should be as generic type, because it declared as
T1 info;
but not
Filterable info;
Is it possible change field type from extendable to generic class without cast? Or its a bug in IDE?
Cell
object that can be passed toConcreteAdapter.setData
isConcreteAdapter.Cell
. What if I'm doing a virtual call on an object with static typeAbstractAdapter
and I pass in a differentCell
object?