Подтвердить что ты не робот

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

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

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

Что он делает? Что это за типы объявлений, называемых Java?

4b9b3361

Ответ 1

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

Ответ 2

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

Бывают случаи, когда вы захотите ограничить типы типов, которым разрешено передавать параметр типа. Например, метод, который работает с числами, может только принимать экземпляры Number или его подклассов. Для этого используются параметры ограниченного типа.

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

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

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" ) );
   }
}

Ответ 3

Это означает, что вы должны отправлять объект 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!
    }
}

Ответ 4

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

Ответ 5

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

Официальное объяснение:

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

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

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

Ответ 7

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

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

  • параметр ограниченного типа: <T extends ABC>
  • возвращаемый тип: T

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

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

save() - это универсальный метод, который возвращает значение типа T T является универсальным типом, который ограничен ABC. Область действия T ограничена save().

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

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

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

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