4, Java核心技术1 泛型

泛型

1,泛型类的静态上下文中类型变量无效
public class Singleton<T>
{
private static T singlelnstance; // Error
public static T getSinglelnstanceO // Error
{
	if (singleinstance == null) construct new instance of T
	return singlelnstance;
}
}
2,不能抛出或捕获泛型类的实例
public class Problem<T> extends Exception { /* . . . */ } // Error can't extend Throwable

下面的方法不能编译

public static <T extends Throwablevoid doWork(Class<T> t)
{
try
{
do work
}
catch (T e) // Error can't catch type variable
{
Logger,global.info(...)
}
}

不过, 在异常规范中使用类型变量是允许的。以下方法是合法的:

public static <T extends Throwablevoid doWork(T t) throws T // OK
try{
	do work
}
catch (Throwable real Cause)
{
	t .initCause( real Cause) ;
	throw t ;
	}
}
3,通配符类型

Pair<? extends Employee> 标识为泛型Pair类型, 它的类型参数是Employee的之类, 如Pari

Pari<? super Employee> 通配符限制为Employee的所有超类型

无限定通配符 Pair<?>
? getFi rst()
void setFirst ⑺
getFirst 的返回值只能赋给一个Object。setFirst 方法不能被调用, 甚至不能用Object 调
用。Pair<?> 和Pair 本质的不同在于: 可以用任意Object 对象调用原始Pair 类的setObject方法
可以调用setFirst(null)

4,泛型类
public class Pair<T>
{
private T first;
private T second;
public Pair() { first = null ; second = null ; }
public PairfT first , T second) { this,first = first; this.second = second; }
public T getFirstO { return first; }
public T getSecondO { return second; }
public void setFirst (T newValue) { first = newValue; }
public void setSecond(T newValue) { second = newValue; }
}

Pair 类引人了一个类型变量T,用尖括号( < >) 括起来,并放在类名的后面

在Java 库中, 使用变量E 表示集合的元素类型, K 和V 分别表示表的关键字与值的类型。T ( 需要时还可以用临近的
字母U 和S) 表示“ 任意类型”。

5,泛型方法
class ArrayAlg{
	public static <T> T getMiddle(T... a){
		return a[a.length / 2];
	 }
}

这个方法是在普通类中定义的, 而不是在泛型类中定义的。然而,这是一个泛型方法,
可以从尖括号和类型变量看出这一点。注意,类型变量放在修饰符(这里是public static ) 的
后面,返回类型的前面。
泛型方法可以定义在普通类中,也可以定义在泛型类中。

6,类型变量的限定

引人了一个类型变量T, Pair 声明返回数据类型

class ArrayAl{
 public static <T extends Comparable〉Pair<T> minmax(T[] a){
	 if (a = null 11 a.length == 0) return null ;
	 	T min = a[0];
		 T max = a[0];
	 for (int i = 1; i < a.length; i++){
	 	if (inin.compareTo(a[i]) > 0) min = a[i];
		if (max.coinpareTo(a[i]) < 0) max = a[i];
	 }
		return new Pairo(m'n, max) ;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值