服务器之家

服务器之家 > 正文

Java泛型类型通配符和C#对比分析

时间:2020-06-26 15:37     来源/作者:jingxian

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

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

?
1
2
3
4
5
6
7
public void test(List<Object> c) 
   for(int i = 0;i < c.size();i++) 
   
       System.out.println(c.get(i)); 
   
}
?
1
2
3
4
//创建一个List<String>对象 
List<String> strList = new ArrayList<String>(); 
//将strList作为参数来调用前面的test方法 
test(strList);

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

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

?
1
2
3
4
5
6
7
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#中约束泛弄类型是这样

?
1
2
3
4
class MyClass<T, U> 
  where T : class
  where U : struct 
{}
?
1
2
3
4
5
6
7
8
9
10
11
12
interface IMyInterface 
  
class Dictionary<TKey, TVal> 
  where TKey : IComparable, IEnumerable 
  where TVal : IMyInterface 
  public void Add(TKey key, TVal val) 
  
  
}

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

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

以上就是小编为大家带来的Java泛型类型通配符和C#对比分析全部内容了,希望大家多多支持服务器之家~

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意 2019-07-07
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
返回顶部