----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
学习笔记 - 泛型
一、泛型简介
*ClassCastException 类型转换异常
*
*泛型,JKD1.5版本以后出现的新特性。用于解决安全问题,是一个安全机制。
*好处
*1.将运行时期出现的问题ClassCastExceptionz转移到了编译时期
* 方便于程序员解决问题。让运行时问题 减少,安全。
*2.避免了强制转换的麻烦。
*
*泛型格式:通过<>来定义要操作的引用数据类型。
*
*在使用java提供的对象时,什么时候写泛型呢?
*通常在集合框架中很常见。
*只要见到<>就要定义泛型。
*
*其实<>就是用来接收类型的。
*
*当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。引用数据类型;
二、泛型使用示例
public class GenericDemo{
/**
* @param args
*/
public static void main(String[] args) {
TreeSet<String> ts = new TreeSet<>(new LenComparator());
ts.add("adfadfdsfsf");
ts.add("adfdf");
ts.add("a");
ts.add("c");
ts.add("adffdsfds");
ts.add("adfsadfsafdf");
Iterator<String> it = ts.iterator();
while(it.hasNext()){
String s = it.next();
System.out.println(s);
}
}
}
class LenComparator implements Comparator<String>
{
@Override
public int compare(String o1, String o2) {
//倒序排
int num = new Integer(o2.length()).compareTo(new Integer(o1.length()));
if(num == 0)
return o1.compareTo(o2);
return num;
}
}
三、使用泛型操作具体类
* 泛型类定义的泛型,在整个类中有效。如果被方法使用,
* 那么泛型类的对象明确要操作的具体类型后,所有要操作的类就已经固定了。
*
* 为了让不同方法可以操作不同类型,而且类型还不确定。
* 那么可以将泛型定义在方法上。
*
*/
/**
* 特殊之处:
* 静态方法不可以访问类上定义的泛型。
* 如果静态操作的应用数据类型不确定,可以将泛型定义在方法上
public static void main(String[] args) {
// Demos<String> d = new Demos<>();
// d.show("nihla");
// d.print("ddd");
// Demos<Integer> d = new Demos<>();
// d.show(new Integer(4));
// d.print(8);
Demess dd = new Demess();
dd.show("heihei ");
dd.print(5);
dd.show(7);
dd.show(new Integer(5));
dd.print("yaa");
Demesss<String> ddd = new Demesss<>();
ddd.show("hhh");
ddd.print(55);
ddd.show(8);
ddd.method("lldjfksl");
}
}
class Demesss<T>
{
public <T> void show(T t){
System.out.println("show:"+t);
}
public <Q> void print(Q q){
System.out.println("print:"+q);
}
//泛型放在返回类型的前面 ,修饰符的后面
//静态先加载,后使用
public static <W> void method(W t){
System.out.println("method:"+t);
}
}
class Demess
{
public <T> void show(T t){
System.out.println("show:"+t);
}
public <Q> void print(Q q){
System.out.println("print:"+q);
}
}
class Demos<T>
{
private T t;
public void show(T t){
System.out.println("show:"+t);
}
public void print(T t){
System.out.println("print:"+t);
}
}