If you meant that class A implements IA, rather than IB, then your code should be just fine saying
for (A item : list) {
// handle item as if it is an IA
}
since all As are, by definition IAs.
Meanwhile, there is no wildcard for <? implements C>
. There is <? extends C>
, and C
can be an interface or a class; however, this isn't necessary for what you seem to be trying to do.
If you want expressly to say for (IA item : list)
because you're not guaranteeing that items in that list are A
s, but are guaranteeing that they are IA
s, then I think you have a slight problem (I can't tell for sure, since you didn't say where this list processing code is located). A List<A>
is not a List<IA>
by definition; if you're building a List<A>
and then passing it to a method that expects a List<IA>
, you'll get a compile time error. You can, however, create a List<IA>
and fill it with A
s. The reason for this is explained in Java's tutorial on generics.