Это:
private static <T extends Reader & Runnable> T getInstance() {
означает, что метод может возвращать что-то, что может быть приведено к любому классу, который одновременно расширяет Reader
и реализует Runnable
. Однако есть только одно такое значение, которое вы можете безопасно вернуть из этого:
return null;
Все остальное может привести к ClassCastException
. В частности, return new Test();
будет успешным, только если вы случайно вызвали контекст, ожидающий получения Test
.
Как правило, вы не можете безопасно вернуть ненулевое T
из метода, если T
не входит в формальные параметры. См. Документацию Проверка на ошибки TypeParameterUnusedInFormals
Проверка для получения более подробной информации.
Если вы хотите вернуть экземпляр Test
из getInstance()
, отбросьте шаблоны и сделайте тип возврата Test
.
private static Test getInstance() {
return new Test();
}