Я видел метод, показанный ниже:
protected <T extends ABC> T save( T Acd, boolean en) {
Что он делает? Как в Java называются подобные объявления методов?
Ограниченные Параметры Типа:
Там может быть раз, когда вы'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" ) );
}
}
Это сохранить
метод, который исключает параметра t и логический тип, где Т должен быть в верхнем ограниченного класса ABC. Типа ABC или любого подкласса могут быть приняты.
Это означает, что вы должны отправить объект 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!
}
}
Это называется дженерики в Java.
В двух словах, дженерики включить типы (классы и интерфейсы) для параметров при определении классов, интерфейсов и методов. Очень похоже на более привычные формальные параметры, используемые в объявлениях метода, параметров типа обеспечивают способ для вас, чтобы повторно использовать тот же код с разными входами. Разница в том, что входы в формальные параметры-значения, в то время как входные параметры Тип типы.
Неофициально:
Строго типизированные языки, такие как Java вызвать больше ошибки появляются при компиляции, а не во время выполнения. Это хорошая вещь. Но это приводит к дублированию кода. Для снижения этого обобщения была добавлена к Java.
protected <T extends ABC> T save( T Acd, boolean en) {
// ...
}
В этой функции есть два места, мы должны обратить внимание на
<Т расширяет Азбука>
Т
Основываясь на этих, я могу ответить на ваши вопросы следующим образом
что он делает?
сохранить ()
- это универсальный метод, который возвращает значение типа Т
. Т
является универсальным типом, который ограничен к Азбуке
. Сфера Т
ограничено сохранить()
.
что эти тип объявления метода в Java?
ИМО, ответ должен быть ограниченные параметры типа, вместо дженерики. Больше о дженерики в Java, вы можете найти здесь.
Еще один вопрос я хотел бы добавить от себя: Почему мы хотим, чтобы такая вещь?
там может быть раз, когда вы хотите ограничить типы, которые могут быть использованы в качестве аргументов типа в параметризованный тип. Например, метод, который работает на цифрах может только хотите принимать экземпляров число или его подклассов. Это ограниченные параметры типа для [1].
Это дженерики. Генерики с границами типов!