黑马--------泛型


---------------------- android培训java培训、期待与您交流! ----------------------

泛型:JDK1.5版本以后出现的新特性,用于解决安全问题,是一个安全机制 。

1.好处


1.)将运行时期出现的问题:classCastException,转移到了编译时期
方便于程序员解决问题,让运行时候问题减少,安全
2.)避免了强制转换麻烦

比如:
class GenericDemo
{
 public static void main(String[] args)
 {
  ArrayList<String>a1=new ArrayList<String>();
  a1.add("acb01");
  a1.add("acb0991");
  a1.add("acb014");
  Iterator<String> it=a1.iterator();
  while(it.hasNext())
  {
   String s=it.next();
   System.out.println(s+"::"s.length());


  }


  }

 }

2.泛型格式:通过<>来定义要操作的引用数据类型

       在使用JAVA提供对象时,什么时候写泛型呢?

通常在集合框架中很常见,
只要见到<>就要定义泛型
 
       其实<>就是用来接收类型的,
当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可

比如:
List<String> al=new ArrayList<String>();

泛型练习:

import java.util.*;

class GenericDemo2
{
     public static void main(String[] args)
    {
           TreeSet<String> ts=new TreeSet<String>(new LenComparator());
           ts.add("abcd");
           ts.add("cc");
           ts.add("cba");
           ts.add("aaa");
           ts.add("z");
           ts.add("hahaha");
           Iterator<String> it=ts.iterator();
           while(it.hasNext())
         {
                 String s=it.next();
                 System.out.println(s+"::"+s.length());


         }

 }

 

}

class LenComparator implements Comparator<String>
{
 public int compare(String o1,String o2)
 {
  int num=new Integer(o1.length()).compareTo(new Integer(o2.length()));
  if(num==0)
   return o1.compareTo(o2);//变换o1.o2,就可以倒序输出
  return num;

 }

 

 

}


3.泛型类:

什么时候定义泛型类?
       当类中要操作的引用数据类型不确定的时候
早期定义Object来完成扩展,现在定义泛型来完成扩展。

//泛型前做法
class Tool
{
 private Object obj;
 pubilc void SetObject(Object obj)
 {
  this.obj=obj;
 

 }
 public Object getObject()
 {
  return obj;
 }

 


}
//使用泛型类


class Util<QQ>
{
  private QQ q;
  public void SetObject(QQ q)
  {
        this.q=q;

  }
  public QQ getObject()
  {
     return q;


  }

 


}


注意:泛型类定义的泛型,在整个类中有效,如果被方法使用,
那么泛型类的对象明确要操作的具体类型后,要操作的类型就已经固定了,

为了让不同方法可以操作不同类型,而且类型还不确定,
那么可以将泛型定义在方法上

特殊之处:
静态方法不可以访问类上定义的泛型
如果静态方法操作的引用数据类型不确定,可以将泛型定义在方法上
public static <W> void method(W t)
{
    System.out.println("method:"+t);

}
4.泛型方法:

class Demo
   {
  public<T> void show(T s)
  {

 

  }
  public<T> void print(T t)
  {

  }

 

 

 }

 



5.泛型接口:
interface Inter<T>
{

 void show(T t)

}
/*
class InterImpl implements Iner<String>
{

 public void show(String t)
 {

  System.out.println("show:"+t);


 }

 

}*/
class InterImpl<T>implements Inter<T>
{
 public void show(T t)
 {

  System.out.println("show:"+t);


 }

 

}
class GenericDemo5
{
 public static void main(String[] args)
 {
  InterImpl i=new InterIml();
  i.show("haha");


 

 }

 


}


6.泛型限定:


?通配符,也可以理解为占位符
不知道是什么类型用?
泛型的限定:
?extends E;可以接收E类型或者子类型,上限
?super E: 可以接收E类型或者父类型,下限

---------------------- android培训java培训、期待与您交流! ----------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值