Рассмотрим:
public interface T {
void foo ();
}
class S {
private class U implements T {
public void foo () { ... }
}
private class V implements T {
public void foo () { ... }
}
}
Если вы используете класс первого экземпляра списка, то он может не совпадать с классом других экземпляров списка - список может быть смесью экземпляров S.U и S.V. Поэтому вам нужно будет вызывать getClass()
для каждого экземпляра в списке.
Кроме того, хотя T.foo () является общедоступным, реализации в U и V не будут доступны вне S, поскольку U и V являются частными классами.
Таким образом, без параметра class для каждого элемента вам нужно получить его класс, найти метод по имени и установить этот метод доступным. Это возможно, но это гораздо больше работы, чем один раз получить публичный метод.