Bounded Wildcards Increase Applicability 使用界限通配符提供适用性

原文地址:http://www.c2.com/cgi/wiki?BoundedWildcardsIncreaseApplicability

批注:也是相当熟悉,在Effects Java 第二版上见过

一种Java风格在方法参数上使用泛型,当方法参数为"producer"时使用通配符界限"extends"(参数只被读取),当方法参数为"consumer"时使用'super' 通配符(将会修改参数值),你可以使用口诀进行记忆 PECS (Producer Extends, Consumer Super).

由JoshuaBloch at JavaOne: [url]http://developers.sun.com/learning/javaoneonline/2006/coreplatform/TS-1512.pdf [/url]

一个JagGregate上的例子

   abstract class UnaryPredicate<A> {
boolean matches( A target );
}

interface Collection<E> {
boolean addAll( Collection<? extends E> newElements );
Collection<E> select( UnaryPredicate<? super E> discriminator );
}

UnaryPredicate<Object> evenHash = new UnaryPredicate<Object>() {
public boolean matches( Object target ) {
return target == null || target.hashCode() % 2 == 0;
}
};

Collection<Number> digits = Set.emptySet();
digits.addAll( Interval.fromTo( 0, 9 ) );
Collection<Number> digitsWithEvenHash = digits.select( evenHash );


批注:代码本身只是用于了解下具体意图

如果这个集合的方法没有使用通配符,那么 digits.addAll() 只能运行Number泛型的集合参数,即使它可以使用Integers, Doubles, 等. 类似的digits.select()只能允许判断使用Number的泛型, 即使他允许以Number为泛型超类的对象.

...翻译并不精准,例子也不如Effects Java的好理解,有时间拿过来补充一下.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值