zoukankan      html  css  js  c++  java
  • Java,泛型类型通配符和C#对照

    c#的泛型没有类型通配符,原因是.net的泛型是CLR支持的泛型,而Java的JVM并不支持泛型,仅仅是语法糖,在编译器编译的时候都转换成object类型

    类型通配符在java中表示的是泛型类型的父类

    public void test(List<Object> c)  
    {  
          for(int i = 0;i < c.size();i++)  
          {  
                 System.out.println(c.get(i));  
          }  
    }  

    //创建一个List<String>对象  
    List<String> strList = new ArrayList<String>();  
    //将strList作为參数来调用前面的test方法  
    test(strList);  

    编译上面的程序,test(strList) 处将发生编译错误,意味着不能把List<String> 当成List<Object> 的子类. 这时候就须要使用类型通配符了,通配符是一个?号

    上面的List<Object>换成List<?>就能够通过编译了


    public void test(List<?> c)  
    {  
          for(int i = 0;i < c.size();i++)  
          {  
                 System.out.println(c.get(i));  
          }  
    }  

    List<String> 能够作为 List<?> 的子类来使用, List<?> 则可作为不论什么List 类型的父类使用,

    假设仅仅想作为List<String>的父类,而不是List<int>呢,? 写成这样 List<?

    extends String>

    在C#中约束泛弄类型是这样


    class MyClass<T, U>  
        where T : class  
        where U : struct  
    {}  

    interface IMyInterface  
    {  
    }  
      
    class Dictionary<TKey, TVal>  
        where TKey : IComparable, IEnumerable  
        where TVal : IMyInterface  
    {  
        public void Add(TKey key, TVal val)  
        {  
        }  
    }  

    Java 中约束泛型通配符上限:

    //表明T类型必须是Number类或其子类,并必须实现java.io.Serializable接口  
    Public class Apple<T extends Number & java.io.Serializable>  
    {}  


  • 相关阅读:
    Automatic Account Determination
    'BAPI_REQUIREMENTS_CREATE' 创建月需求计划(MD61)
    Bapi_Quotation_Createfromdata2VA21
    SAP系统拷贝 UNIX + Oracle
    SAP NotesBW
    BAPI_SALESORDER_CREATEFROMDAT2VA01
    SAP Note 449891 Temporary database objects in BW 3.x
    BAPI_GOODSMVT_CREATE mb01,mb1A
    BAPI_SALESDOCU_CREATEFROMDATA1VA01
    Optimizing performance of ODS objects(来自sap notes 384023)
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6937283.html
Copyright © 2011-2022 走看看