Представьте, что у вас есть две реализации MyClass
, Foo
и Bar
.Поскольку поле типа MyClass
, _this
может быть Foo
или Bar
.
Теперь, поскольку ваш метод getInstance
возвращает <T extends MyClass>
, разрешено вызывать его любым изэти способы:
MyClass myClass = Util.getInstance(MyClass.class);
Это не работает, если это первый вызов, потому что MyClass
является интерфейсом и не может быть создан с помощью newInstance()
.
Foo foo = Util.getInstance(Foo.class);
Bar bar = Util.getInstance(Bar.class);
Что бы произошло, если бы _this
был экземпляром Foo
, а вы назвали Util.getInstance(Bar.class)
?Вот почему вам не разрешено это делать.