import java.util.List;
import java.util.Iterator;
import java.util.ArrayList;
class FooDemo
{
public static void doFoos(List<? implements Fooable> fooers)
{
Iterator<? extends Fooable> it = fooers.iterator();
while(it.hasNext())
{
it.next().foo();
}
}
public static void main
(String[] args
) {
List<ConcreteFoo> myfoos = new ArrayList<ConcreteFoo>();
myfoos.add(new ConcreteFoo());
doFoos(myfoos);
}
}
interface Fooable
{
void foo();
}
class ConcreteFoo implements Fooable
{
public void foo()
{
}
}
aW1wb3J0IGphdmEudXRpbC5MaXN0OwppbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwppbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKCmNsYXNzIEZvb0RlbW8KewogIHB1YmxpYyBzdGF0aWMgdm9pZCBkb0Zvb3MoTGlzdDw/IGltcGxlbWVudHMgRm9vYWJsZT4gZm9vZXJzKQogIHsKICAgIEl0ZXJhdG9yPD8gZXh0ZW5kcyBGb29hYmxlPiBpdCA9IGZvb2Vycy5pdGVyYXRvcigpOwogICAgd2hpbGUoaXQuaGFzTmV4dCgpKQogICAgewogICAgICBpdC5uZXh0KCkuZm9vKCk7CiAgICB9CiAgfQogIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgewogICAgTGlzdDxDb25jcmV0ZUZvbz4gbXlmb29zID0gbmV3IEFycmF5TGlzdDxDb25jcmV0ZUZvbz4oKTsKICAgIG15Zm9vcy5hZGQobmV3IENvbmNyZXRlRm9vKCkpOwogICAgZG9Gb29zKG15Zm9vcyk7CiAgfQp9CgppbnRlcmZhY2UgRm9vYWJsZQp7CiAgdm9pZCBmb28oKTsKfQoKY2xhc3MgQ29uY3JldGVGb28gaW1wbGVtZW50cyBGb29hYmxlCnsKICBwdWJsaWMgdm9pZCBmb28oKQogIHsKICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRm9vIVxuIik7CiAgfQp9Cg==