在工作中遇到一个问题,用代码描述如下: package?test;
import?java.util.LinkedList;
import?java.util.List;
public?class?ListTest?{
????public?void?func(List<Base>?list)?{
????}
??...
分类:
编程语言 时间:
2015-11-08 12:47:54
阅读次数:
230
变体的引入是为了提高泛型类型的变量在赋值时可以对类型进行兼容性转换,以扩展泛型的灵活性。下面看个例子:public delegate void DoWork(T arg);........DoWork del1=delegate(A arg){//.......};DoWork del2=del1;...
分类:
其他好文 时间:
2015-11-01 00:15:20
阅读次数:
218
1、数组的协变性数组的协变性(covariant)是指:如果类Base是类Sub的基类,那么Base[]就是Sub[]的基类。而泛型是不可变的(invariant),List不会是List的基类,更不会是它的子类。数组的协变性可能会导致一些错误,比如下面的代码:1234public static v...
分类:
编程语言 时间:
2015-10-31 00:14:39
阅读次数:
267
Convariance(协变):派生类型的引用可以赋值给基类变量。 Contravariance(逆变):一种委托的引用赋值给另一种委托类型的栈变量。其中两种委托类型的约束类型是继承关系!逆变关键字in
分类:
其他好文 时间:
2015-10-29 16:13:40
阅读次数:
145
在上篇《JAVA泛型——协变》这篇文章中遗留以下问题——协变不能解决将子类型添加到父类型的泛型列表中。本篇将用逆变来解决这个问题。实验准备 我们首先增加以下方法,见代码清单1所示。代码清单1/** * * 描 述:Exp3使用逆变 * 作 者:jiaan.gja ...
分类:
编程语言 时间:
2015-10-29 13:21:43
阅读次数:
180
具体可以参考:《Effective Java》PECS 原则 (producser-extends, consumer-super)G[+A]类似一个生产者,提供数据。(大部分情况下称G为容器类型)G[-A] 是一个消费者,主要用来消费数据。(如上的 Equiv[-A] (其实就是个A => Boo...
分类:
其他好文 时间:
2015-10-24 23:14:05
阅读次数:
242
在上篇《Java泛型的协变》这篇文章中遗留以下问题——协变不能解决将子类型添加到父类型的泛型列表中。本篇将用逆变来解决这个问题。实验准备 我们首先增加以下方法,见代码清单1所示。代码清单1 /** * * 描 述:Exp3使用逆变 * 作 者:jiaan.gja...
分类:
编程语言 时间:
2015-09-30 12:59:15
阅读次数:
212
在上篇《Java泛型的基本使用》这篇文章中遗留以下问题,即将子类型也能添加到父类型的泛型中,要实现这种功能必须借助于协变。实验准备 现在在上篇文章展示的Decorator类型的基础上,增加一些代码,如代码清单1所示。代码清单1/** * * 描 述:Exp2使用br/> ...
分类:
编程语言 时间:
2015-09-29 14:40:51
阅读次数:
176
委托是一种定义方法签名的类型,是对方法的抽象、封装。与委托的签名(由返回类型和参数组成)匹配的任何可访问类和结构中的任何方法都可以分配给该委托,方法可以是静态方法,也可以是实例方法。将一个方法绑定到委托时,C#和CLR允许引用类型的协变性和逆变性。协变性是指方法的返回类型可以派生自委托的返回类型.....
分类:
其他好文 时间:
2015-09-22 01:24:25
阅读次数:
161