Подпись типа
static <T, V extends T> boolean isIn(T x, V[] y)
не намного лучше, чем
static boolean isIn(Object x, Object[] y)
, так как вызывающая сторона всегда может использовать Object
для T
, что допускает произвольный объект в качестве первого аргумента , а также произвольный ссылочный тип для элементов массива.
Следовательно, когда вы меняете метод на
@Test
public void test(){
Integer[] nums = {1,2,3,4,5};
if(GenMethodDemo2.<Object,Integer>isIn("java",nums))
System.out.println("java is in nums");
if(!GenMethodDemo2.<Object,Integer>isIn("java",nums))
System.out.println("java is not in nums");
}
, он может быть скомпилирован во всех Java версиях, которые поддерживают Generics.
Из-за ковариантных массивов также будет работать указание
if(GenMethodDemo2.<Object,Object>isIn("java",nums))
System.out.println("java is in nums");
if(!GenMethodDemo2.<Object,Object>isIn("java",nums))
System.out.println("java is not in nums");
Вывод типа Java 8 не меняет, какой вызов метода допустим, он только упрощает выполнение допустимых вызовов , поскольку у вас меньше сценария ios, где вам нужно явно указать аргументы типа.