logo search
Лекции ПИС / Книги / Кулямин - Технологии программирования

Шаблонные типы и операции

В последних версиях обоих языков введены шаблонные, т.е. имеющие типовые параметры, типы и операции.

Ниже приводятся примеры декларации шаблонного метода и его использования в Java и C#. В последнем вызове в обоих примерах явное указание типового аргумента у метода getTypeName() необязательно, поскольку он вычисляется из контекста вызова. Если вычислить типовые аргументы вызова метода нельзя, их нужно указывать явно.

 

using System;

public class A

public class A

{

{

public static <T> String getTypeName

public static string getTypeName<T>

(T a)

(T a)

{

{

if(a == null) return "NullType";

if(a == null) return "NullType";

else return

else return

a.getClass().getName();

a.GetType().FullName;

}

}

public static void main(String[] args)

public static void Main()

{

{

String y = "ABCDEFG";

string y = "ABCDEFG";

System.out.println( getTypeName(y) );

Console.WriteLine( getTypeName(y) );

System.out.println

Console.WriteLine

( getTypeName(y.length()) );

( getTypeName(y.Length) );

System.out.println

Console.WriteLine

( A.<Character>getTypeName

( getTypeName<char>(y[1]) );

(y.charAt(1)) );

}

}

}

}

В C# любой тип может быть аргументом

В Java в качестве типовых аргументов могут

использоваться только ссылочные типы.

шаблона.

Примитивный тип не может быть аргументом

 

шаблона — вместо него нужно использовать

 

соответствующий класс-обертку.