Я не уверен, почему вы пытаетесь сделать то, что вы на самом деле пытаетесь сделать. Предоставление большего количества контекста может позволить нам оказать вам дополнительную помощь.
public class B <X extends B>{
public X foo() throws InstantiationException, IllegalAccessException{
return (X)this.getClass().newInstance();
}
}
public class C extends B<C>{
}
Позвольте мне предложить вам этот совет. Классы CS, как правило, преподаются в том, что профессора влюблены в наследство, но не выяснили состав. Я думаю, что вы можете искать это композиция. Поэтому вместо вызова getNextThing для самой Thing, возможно, вам следует подумать о том, чтобы заставить Thing реализовать Iterable
Это означает, что вам просто нужно написать Итератор , который может инкапсулировать логику получения следующей вещи, поскольку она, похоже, не вписывается в вашу модель наследования. Еще одним преимуществом этого является то, что вы получаете некоторые хорошие синтаксические устройства из этого (улучшено для понимания цикла).