java基础---类集框架三

本文介绍了Java泛型的概念及其带来的两大好处:一是将运行时的类型转换异常提前到编译期发现,二是避免了强制类型转换的繁琐。通过实例演示了如何在集合类如TreeSet中使用泛型,并展示了泛型在类和方法级别的应用。

----------- 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);
 }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值