kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
Nigel Thomas
Nigel Thomas
Вопрос

Что означает <T extends?

Я видел метод, показанный ниже:

protected <T extends ABC> T save( T Acd, boolean en) {

Что он делает? Как в Java называются подобные объявления методов?

38 2012-10-17T06:28:48+00:00 7
 BuZZ-dEE
BuZZ-dEE
Редактировал вопрос 25-го августа 2015 в 4:33
Программирование
java
generics
Решение / Ответ
 basar
basar
17-го октября 2012 в 6:31
2012-10-17T06:31:20+00:00
Дополнительно
Источник
Редактировать
#17480710

Он называется общим методом. Вся эта концепция в Java называется "Generics". Это объявление означает, что T может быть любым типом, который является подклассом ABC.

38
0
 Okky
Okky
17-го октября 2012 в 6:53
2012-10-17T06:53:25+00:00
Дополнительно
Источник
Редактировать
#17480713

Ограниченные Параметры Типа:

Там может быть раз, когда вы'll хочу ограничить виды типов, которые можно передать в качестве параметра тип. Например, метод, который работает на цифрах может только хотите принимать экземпляров число или его подклассов. Это ограниченные параметры типа для.

Объявить тип параметра, ограниченного, списка тип параметра's имя, затем ключевое слово extends, а затем по его верхней границы. Пример:

Следующий пример иллюстрирует, как распространяется и используется в общем смысле, имея в виду, что "тянется" и (как в классах) или "реализует на" (как в интерфейсах). Этот пример универсального метода возврата наибольшего из трех сравниваемых объектов:

public class MaximumTest
{
   // determines the largest of three Comparable objects
   public static <T extends Comparable<T>> T maximum(T x, T y, T z)
   {                      
      T max = x; // assume x is initially the largest       
      if ( y.compareTo( max ) > 0 ){
         max = y; // y is the largest so far
      }
      if ( z.compareTo( max ) > 0 ){
         max = z; // z is the largest now                 
      }
      return max; // returns the largest object   
   }
   public static void main( String args[] )
   {
      System.out.printf( "Max of %d, %d and %d is %d\n\n", 
                   3, 4, 5, maximum( 3, 4, 5 ) );

       System.out.printf( "Maxm of %.1f,%.1f and %.1f is %.1f\n\n",
                   6.6, 8.8, 7.7, maximum( 6.6, 8.8, 7.7 ) );

       System.out.printf( "Max of %s, %s and %s is %s\n","pear",
         "apple", "orange", maximum( "pear", "apple", "orange" ) );
   }
}
15
0
Subhrajyoti Majumder
Subhrajyoti Majumder
17-го октября 2012 в 6:32
2012-10-17T06:32:09+00:00
Дополнительно
Источник
Редактировать
#17480712

Это сохранить метод, который исключает параметра t и логический тип, где Т должен быть в верхнем ограниченного класса ABC. Типа ABC или любого подкласса могут быть приняты.

Subhrajyoti Majumder
Subhrajyoti Majumder
Редактировал ответ 5-го ноября 2015 в 4:18
3
0
Luiggi Mendoza
Luiggi Mendoza
17-го октября 2012 в 6:30
2012-10-17T06:30:50+00:00
Дополнительно
Источник
Редактировать
#17480709

Это означает, что вы должны отправить объект ABC или дочерний класс ABC, другие классы не допускаются. Также, ваша переменная Acd может использовать методы класса ABC, которые видны классу, использующему метод save.

Это полезно, когда ваш класс T расширяет интерфейсы. Например, вы создаете класс, который обрабатывает сортировку массивов объектов, и этот класс должен реализовать интерфейс Comparable, иначе массив не будет разрешен:

class Class1 implements Comparable<Class1> {
    //attributes, getters and setters...
    int x;

    //implementing the interface...
    public int compareTo(Class1 c1) {
        //nice implementation of compareTo
        return (this.x > c1.x)? 1 : (this.x < c1.x) ? 0 : -1;
    }
}

class Class2 {
    int x;
}

public class Sorter<T extends Comparable<T>> {

    public static void insertionSort(T[] array) {
        //good implementation of insertion sort goes here...
        //just to prove that you can use the methods of the Comparable interface...
        array[0].compareTo(array[1]);
    }

    public static void main(String[] args) {
        Class1[] arrC1 = new Class1[5];
        Class2[] arrC2 = new Class2[5];
        //fill the arrays...
        insertionSort(arrC1); //good!
        insertionSort(arrC2); //compiler error!
    }
}
Luiggi Mendoza
Luiggi Mendoza
Редактировал ответ 17-го октября 2012 в 6:39
3
0
 sixtytrees
sixtytrees
10-го июня 2016 в 3:42
2016-06-10T15:42:50+00:00
Дополнительно
Источник
Редактировать
#17480714

Это называется дженерики в Java.

Официальное описание:

В двух словах, дженерики включить типы (классы и интерфейсы) для параметров при определении классов, интерфейсов и методов. Очень похоже на более привычные формальные параметры, используемые в объявлениях метода, параметров типа обеспечивают способ для вас, чтобы повторно использовать тот же код с разными входами. Разница в том, что входы в формальные параметры-значения, в то время как входные параметры Тип типы.

Неофициально:

Строго типизированные языки, такие как Java вызвать больше ошибки появляются при компиляции, а не во время выполнения. Это хорошая вещь. Но это приводит к дублированию кода. Для снижения этого обобщения была добавлена к Java.

 Pang
Pang
Редактировал ответ 12-го октября 2018 в 3:40
3
0
 trdngy
trdngy
22-го мая 2019 в 10:05
2019-05-22T10:05:30+00:00
Дополнительно
Источник
Редактировать
#17480715
protected <T extends ABC> T save( T Acd, boolean en) {
    // ...
}

В этой функции есть два места, мы должны обратить внимание на

  • ограниченное параметр тип: <Т расширяет Азбука>
  • вернулся-тип: Т

Основываясь на этих, я могу ответить на ваши вопросы следующим образом

что он делает?

сохранить () - это универсальный метод, который возвращает значение типа Т. Т является универсальным типом, который ограничен к Азбуке. Сфера Т ограничено сохранить().

что эти тип объявления метода в Java?

ИМО, ответ должен быть ограниченные параметры типа, вместо дженерики. Больше о дженерики в Java, вы можете найти здесь.

Еще один вопрос я хотел бы добавить от себя: Почему мы хотим, чтобы такая вещь?

там может быть раз, когда вы хотите ограничить типы, которые могут быть использованы в качестве аргументов типа в параметризованный тип. Например, метод, который работает на цифрах может только хотите принимать экземпляров число или его подклассов. Это ограниченные параметры типа для [1].

2
0
Rudolf M&#252;hlbauer
Rudolf Mühlbauer
17-го октября 2012 в 6:31
2012-10-17T06:31:38+00:00
Дополнительно
Источник
Редактировать
#17480711

Это дженерики. Генерики с границами типов!

См. здесь для справки

 gks
gks
Редактировал ответ 17-го октября 2012 в 6:35
2
0
Похожие сообщества 11
pro.jvm
pro.jvm
5 814 пользователей
Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш канал: @proJVM Вакансии: @jvmjobs @jvmjobschat ⚠️ Оффтоп -> @flood ❌Переход на личности ❌Троллинг ❌Реклама ❌HH (вакансии) ❌Варез
Открыть telegram
learn.java
learn.java
5 375 пользователей
Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat
Открыть telegram
Java & Co
Java & Co
4 434 пользователей
Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/179171 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude
Открыть telegram
pro.JVM Jobs Chat
pro.JVM Jobs Chat
2 564 пользователей
Чат для обсуждения вакансий на JVM языках. Правила: - Никакого спама - Никакого троллинга и оскорблений участников - Размещение вакансий только через канал Канал для вакансий: @jvmjobs Основной чат: @jvmchat Наши друзья: @scala_jobs, @scala_jobs_feed
Открыть telegram
Java/Kotlin and more
Java/Kotlin and more
2 063 пользователей
чат о Java/Kotlin и связанных технологиях. We're discussing: job, tech questions etc. languages: russian, java, eng, kotlin Ссылка на чат: t.me/springframeworkio
Открыть telegram
Java Underground
Java Underground
1 751 пользователей
Библиотека по Java https://t.me/javalib Наше сообщество ВК: https://vk.com/javatutorial Вакансии и резюме свои строго в этот канал: https://t.me/job_java
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Ilya Smirnov
Зарегистрирован 5 дней назад
2
Денис Васьков
Зарегистрирован 1 неделю назад
3
Dima Patrushev
Зарегистрирован 1 неделю назад
4
sirojidddin otaboyev
Зарегистрирован 2 недели назад
5
Елена Гайдамамакинат
Зарегистрирован 2 недели назад
JA
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией