Java Generics — Что означают имена ID и S?

#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.