Далее обратите внимание на то, что методCopylnsert вызывается в методеMain с помощью обычного синтаксиса и без указания аргументов типа. Дело в том, что типы аргументов различаются автоматически, а типТсоответственно подстраивается. Этот процесс называется
ArrayUtils.Copylnsert (99,
типTстановится типомint,поскольку числовое значение99и элементы массивовnumsиnum&2относятся к типуint.А во втором вызове данного метода используются строковые типы, и поэтому типТзаменяется типомstring.
А теперь обратите внимание на приведенную ниже закомментированную строку кода.
// ArrayUtils.Copylnsert(0.01, 2, nums, nums2);
Если удалить символы комментария в начале этой строки кода и затем попытаться перекомпилировать программу, то будет получено сообщение об ошибке. Дело в том, что первый аргумент в данном вызове методаCopylnsert относится к типуdouble,а третий и четвертый аргументы обозначают элементы массивовnumsиnums2типаint.Но все эти аргументы типа должны заменить один и тот же параметр типаТ,а это приведет к несоответствию типов и, как следствие, к ошибке во время компиляции. Подобная возможность соблюдать типовую безопасность относится к одним из самых главных преимуществ обобщенных методов.
Синтаксис объявления методаCopylnsert может быть обобщен. Ниже приведена общая форма объявления обобщенного метода.
В любом случае
Вызов обобщенного метода с явно указанными аргументами типа
В большинстве случаев неявной выводимости типов оказывается достаточно для вызова обобщенного метода, тем не менее аргументы типа могут быть указаны явным образом. Для этого достаточно указать аргументы типа после имени метода при его вызове. В качестве примера ниже приведена строка кода, в которой методCopylnsert вызывается с явно указываемым аргументом типаstring.
ArrayUtils.CopyInsert
Тип передаваемых аргументов необходимо указывать явно в том случае, если компилятор не сможет вывести тип параметраТили если требуется отменить выводимость типов.
Применение ограничений в обобщенных методах
На аргументы обобщенного метода можно наложить ограничения, указав их после списка параметров. В качестве примера ниже приведен вариант методаCopylnsert для обработки данных только ссылочных типов.