泛型类 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; 语法简单测试的主要内容,如果未能解决你的问题,请参考以下文章

泛型类中的 T.class 等价物是啥? [复制]

java泛型类的继承规则

泛型类

通过泛型类实现输出学生信息

Jackson - 使用泛型类反序列化

java 定义泛型类的问题