#java #generics
#java #дженерики
Вопрос:
Я нашел приведенное ниже объявление в одном из интерфейсов нашего java-приложения. Может кто-нибудь объяснить, что ID
S
означает и? Я понимаю T
, что это означает универсальный тип.
public interface CrudRepository<T, ID> extends Repository<T, ID> {
<S extends T> S save(S var1);
Комментарии:
1. Все они являются общими, вы можете называть их так, как хотите (хотя обычно используются одиночные буквы в верхнем регистре, чисто по соглашению).
T
иID
являются дженериками на уровне класса,S
являются дженериками на уровне метода.2. @sp00m — не могли бы вы также объяснить это утверждение — <S расширяет T> S
3. S расширяет T означает, что S, возвращаемый тип операции ( здесь save ), должен быть подтипом T.
4.Смотрите docs.oracle.com/javase/tutorial/java/generics/bounded.html.
Ответ №1:
<S extends T>
означает, что S
возвращаемый тип операции (в данном случае save
) должен быть подтипом T
или равен T
Также, как упоминалось в комментарии sp00m, это дженерики, которые вы можете назвать так, как хотите, T
и ID
которые являются дженериками уровня класса, S
являются дженериками уровня метода
Дополнительную информацию можно найти здесь: Java-Generics
Комментарии:
1. На самом деле, возвращаемый тип должен быть присвоен T. Это может быть сам T или подтип T.
Ответ №2:
Все 3 являются параметрами типа.
К сожалению, Javadoc CrudRepository не упоминает их, но, по крайней мере, репозиторий указывает 2 из них.
T - the domain type the repository manages ID - the type of the id of the entity the repository manages
S должно быть равно T или подклассу T.