как работает этот код (тип возвращаемого значения не определен)
В этом коде используется универсальных , а T
называется параметром универсального типа . Тип возвращаемого значения не является «неопределенным». Вместо этого мы говорим, что параметризован : тип возвращаемого значения в конечном итоге будет заменен на реальный, конкретный тип. То есть тип возвращаемого значения определяется любым типом Task<T>
, который вы создали.
Вы можете думать об этом как о функции, которая принимает определенный тип и генерирует специализированную версию каждого Task<T>
, который запрашивается. (Это не совсем то, что происходит под прикрытием - на самом деле, в конечном счете, компилятор отбрасывает информацию о типе времени выполнения универсального объекта - но более углубленная обработка, вероятно, выходит за рамки этого ответа StackOverflow.)
Под прикрытием, когда вы компилируете этот код, компилятор Java позаботится о том, чтобы не нарушалось никаких правил создания Task<T>
и отношения к его execute()
методам. Например, компилятор пометит это как недопустимое:
public class Boat { ... }
public class Car { ... }
public CarFactory implements Task<Car> {
public Boat execute() { ... } // Error! A Boat is not a Car.
}