泛型类 class<T; 语法简单测试
Posted 一万年太久
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了泛型类 class<T; 语法简单测试相关的知识,希望对你有一定的参考价值。
class Program
static void Main(string[] args)
SaySomeThing<Hi> saySomeThing_Hi = new SaySomeThing<Hi>();
Console.WriteLine(saySomeThing_Hi.GetObj().Content);
SaySomeThing<Hello> saySomeThing_Hello = new SaySomeThing<Hello>();
Hello hello = saySomeThing_Hello.GetObj();
Console.WriteLine(hello.Title + "\\r\\n" + hello.Content);
Console.ReadKey();
class SaySomeThing<T> where T : Hi
public T GetObj()
return Activator.CreateInstance<T>();
class Hi
public string Content get; set; = "窗前明月光,疑是地上霜。";
class Hello : Hi
public string Title get; set; = "静夜思";
输出:
窗前明月光,疑是地上霜。
静夜思
窗前明月光,疑是地上霜。
泛型类
1 泛型类的定义格式:
class 类名<声明自定义泛型>{
}
示例:
1 //需求: 编写一个数组 的工具类 2 class MyArrays<T> { 3 public void reverse(T[] arr) { 4 for (int startIndex = 0, endIndex = arr.length - 1; startIndex < endIndex; startIndex++, endIndex--) { 5 T temp = arr[startIndex]; 6 arr[startIndex] = arr[endIndex]; 7 arr[endIndex] = temp; 8 } 9 } 10 11 public String toString(T[] arr) { 12 StringBuilder sb = new StringBuilder(); 13 for (int i = 0; i < arr.length; i++) { 14 if (i == 0) { 15 sb.append("[" + arr[i] + ","); 16 } else if (i == arr.length - 1) { 17 sb.append(arr[i] + "]"); 18 } else { 19 sb.append(arr[i] + ","); 20 } 21 } 22 return sb.toString(); 23 } 24 } 25 26 public class Demo2 { 27 public static void main(String[] args) { 28 Integer[] arr = { 1, 2, 3, 4 }; 29 MyArrays<Integer> tool = new MyArrays(); 30 tool.reverse(arr); 31 System.out.println("数组的元素为: " + tool.toString(arr)); 32 33 String[] arr2 = { "aaa", "bbb", "ccc" }; 34 MyArrays<String> tool2 = new MyArrays(); 35 tool2.reverse(arr2); 36 System.out.println("数组的元素为: " + tool2.toString(arr2)); 37 } 38 39 }
2 泛型类要注意的事项:
A. 在类上自定义泛型的具体数据类型是在使用该类的时候创建对象时候确定的。
B. 如果一个类在类上已经声明了自定义泛型,如果使用该类创建对象的时候没有指定泛型的具体数据类型,那么默认为Object类型
例如:
那么
C. 在类上自定义泛型不能作用于静态的方法,如果静态的方法需要使用自定义泛型,那么需要在方法上自己声明使用。
原因:非静态方法是在创建对象后才能调用的;静态方法不一定需要通过创建对象来调用。
而泛型的具体数据类型是在使用该类创建对象时候才确定的。
例如:
D. 此时,静态方法上声明的<T>与类上声明的<T>不会冲突,因为此方法具体数据类型是在调用该方法的时候传入实参时才确定具体的数据类型的。
以上是关于泛型类 class<T; 语法简单测试的主要内容,如果未能解决你的问题,请参考以下文章