美文网首页
泛型-Java与C#

泛型-Java与C#

作者: WxhShine | 来源:发表于2020-02-20 00:33 被阅读0次
泛型.jpg

泛型是什么?

​ 泛型:是可以在编程时,不确定使用某种类型时,用它来代替要使用的类,使之可以接受使用者指定的类,相当于类型参数化.

​ (百度百科上是这样定义的:1.在程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个别对象。(这是当今较常见的定义)2.在程序编码中一些包含参数的类。其参数可以代表类或对象等等。(人们大多把这称作模板)不论使用哪个定义,泛型的参数在真正使用泛型时都必须作出指明。)

泛型怎么用?

​ 泛型的用法:1. 泛型方法;2. 泛型类;

  1. 泛型方法

    泛型方法可以使方法根据用户的使用让类型参数化, 可以在接受不同的类型;

    java:
    public class HelloWorld {
        public static void main(String[] args) {
            Print("Hello World");
            Print(123);
        }
        
     public  static <T> void Print (T printValue){
            System.out.println(printValue);
        }
    }
    
    c#
    static void Main(string[] args) 
    {
          Print("Hello world");
          Print(123);
          Console.Read();
    }
    
    public static void Print<T>(T printValue)
    {
     Console.WriteLine(printValue);
    }
    

    两个例子的打印结果都是一样的:

    Hello World
    123
    

​ C#中的泛型方法中的泛型参数(T) 是写在方法名称后面

​ Java中的泛型方法中的泛型参数(T)是写在返回类型的前面

​ 如果要使用多个泛型参数则是在<>中两个参数间用 ","隔开 比如<T,K>

  1. 泛型类(泛型接口)

    泛型类中的泛型的使用区间是在整个类中, 而泛型方法是在整个方法中使用. 并且子类继承这个泛型类,子类也可以使用此泛型(泛型接口同理)

c#
    

 public class GenericDemo<T>
    {
        public T PrintValue { get; set; }
        public void Print()
        {
            Console.WriteLine(PrintValue);
        }
    }

    public class GenericDemoChild<T> : GenericDemo<T>
    {
        public void PrintChild()
        {
            Console.WriteLine("Chlid" + PrintValue.ToString());
        }
    }
Java
public class Main {
    
    public static void main(String[] args) {
        var generic = new GenericDemo<String>();
        generic.PrintValue = "Hello World";
        generic.Print();
        var genericChild = new GenericDemoChild<Integer>();
        genericChild.PrintValue = 123;
        genericChild.ChildPrint();
    }
}
 public class GenericDemo<T> {
     
    public T PrintValue;

    public void Print(  ){
        System.out.println(PrintValue);
    }
}
public class GenericDemoChild<T> extends  GenericDemo<T> {
    
    public void ChildPrint(){
        System.out.println(PrintValue);
    }
}

C#与Java泛型的的不同之处

c#:

​ c#中有泛型约束,限制泛型的条件;比如限制泛型的父类必须时某某类型,现在泛型必须有构造函数,必须实现的接口;

public class Generic<T> where T : class , new(){}

where T 后面加上针对 泛型T 约束的条件

class :约束T必须时引用类型;

struct : 约束T必须时值类型;

new() : 必须有无参构造函数(若是有其他约束条件 new()必须放在最后一个约束条件);

一个具体类名: 必须继承自此类;

一个接口名: 必须实现此接口.

java:

​ 通配符 ? 表示泛型中可以任意的类型

    public static void main(String[] args) {

        List<String> stringlist = new ArrayList<>();
        stringlist.add("hel");
        stringlist.add("11");
        Print(stringlist);
        List<Integer> intList = new ArrayList<>();
        intList.add(11);
        intList.add(22);
        Print(intList);
    }
    public static void Print(List<?> list){
        System.out.println(list);
    }

上面的例子可以正确输出.

在通配符?后面加上 super(下) class类名 或者 extends(上) class类名 表示通配符的上下限

相关文章

  • TS 笔记九 泛型

    参考C# 泛型 泛型与非泛型集合[https://www.jianshu.com/p/e45e7573f928] ...

  • 泛型

    与Java泛型相同,Kotlin同样提供了泛型支持。对于简单的泛型类、泛型函数的定义,Kotlin 与 Java ...

  • 泛型-Java与C#

    泛型是什么? ​ 泛型:是可以在编程时,不确定使用某种类型时,用它来代替要使用的类,使之可以接受使用者指定的类...

  • C# 与 Java 的区别

    泛型不一样,Java泛型只是编译时的,但C#的泛型在运行时也被维持,而且适用于value types 和 refe...

  • Java泛型教程

    Java泛型教程导航 Java 泛型概述 Java泛型环境设置 Java泛型通用类 Java泛型类型参数命名约定 ...

  • C++20学习:concept用法介绍

    概述 众所周知,C++的泛型强大,很多语言都学了,比如C#、Java,虽然Java的泛型只是语法糖,不值得一提。 ...

  • C#基础提升系列——C#泛型

    C# 泛型(Generics) 泛型概述 泛型是C#编程语言的一部分,它与程序集中的IL(Intermediate...

  • Java 泛型

    java泛型与C#类似,不过必须使用引用类型,不能使用基础类型(int等等),基础类型有相应的封装,比如int,封...

  • Kotlin泛型与DSL重点记录

    泛型 kotlin的泛型语法与java类似,比如声明一个泛型类: 类型参数约束 类似于java中的entends关...

  • Java 泛型与通配符

    参考地址:《Java 泛型,你了解类型擦除吗?》 《Java中的逆变与协变》 《java 泛型中 T、E .....

网友评论

      本文标题:泛型-Java与C#

      本文链接:https://www.haomeiwen.com/subject/kghtqhtx.html