метод Java, вызов может быть параметризован, как в следующем коде:Когда метод параметризованного метода полезен?
class Test
{
<T> void test()
{
}
public static void main(String[] args)
{
new Test().<Object>test();
// ^^^^^^^^
}
}
я узнал, что это возможно в диалоге настроек Eclipse, Java Formatter и спрашиваю, есть ли какие-либо случаи, когда это полезно или необходимо.
EDIT
Основываясь на отличном ответ Арне я придумал следующий вывод:
В дополнение к повышенной безопасности типа в качестве примера Арне иллюстрирует параметризованный вызов метода позволяет вам указать общий базовый тип аргументов методов, которые должны быть типом элементов контейнера. Этот тип обычно автоматически вычисляется компилятором по наиболее определенному базовому типу. Путем параметризации вызова метода это поведение может быть переопределено. Вызов параметризованного метода может потребоваться, если для компилятора имеется несколько общих типов.
Следующий пример демонстрирует, что поведение:
import java.util.Arrays;
import java.util.List;
class Test
{
public static void main(String[] args)
{
Integer a=new Integer(0);
Long b=new Long(0);
List<Object> listError=Arrays.asList(a, b);
//error because Number&Comparable<?> is not Object
List<Object> listObj=Arrays.<Object>asList(a, b);
List<Number> listNum=Arrays.<Number>asList(a, b);
List<Comparable<?>> listCmp=Arrays.<Comparable<?>>asList(a, b);
}
}
Такое поведение определяется в пунктах Java Language Specification Третье издание 8.4.4 и 15.12.2.7, но не легко понять.
Является ли это только тем, что думает, что странно, как все в этой теме, кажется, считают, что «параметризованный метод» должен быть универсальным методом? Метод, который имеет объявленные параметры, является «параметризованным» методом. Общий метод - это еще один параметризованный метод, в котором тип является одним из таких параметров. Или я что-то пропустил? –
Вы находитесь на месте! Оглядываясь назад, название должно быть, вероятно, «Когда вызов метода с аргументами типа, который нельзя сделать полезным?» –