Java自定义的应用技巧
来源:不详
加入收藏 0评论
2012/3/3 21:30:45

学历提升咨询:177 8786 5775(微信)



培训报名咨询:133 1252 4700(微信)



2025年云南成人高考大专-本科报名简章

【经济师培训】 【建造师】 【执业药师】 【技能证】

 

我们在JAVA中处处都用到了范型,JAVA中的范型是从C++模板继承来的,不过JAVA的范型的功能远远没有C++那么强大。
   
    我们知道在C++中模板可以很方便的代替任意类型的数据。如下:
   
    1. template<class T>
   
    2.
   
    3. void show(T x)
   
    4.
   
    5. {
   
    6.
   
    7. cout《x《endl ;
   
    8. }
   
    上面的T可以代表任意类型的数据,这样不是大大减少了函数的重载次数,提高了效率呢。
Java是从C++过来的,理解了C++,java也不在话下。
   
    在
Java中自定义范型也可以用在方法上。如下:
   
    1、
   
    //这样声明的范型可以代替任意类型数据,我们市场用到的键值对Map.Entry<K,V> 不就是给予范型的吗?
   
    K V都可以代替任意类型的值,但是在java中范型的实际类型必须是引用类型。
   
    1.   <K,V> void get(K k,V v)
   
    2.
   
    3.  {
   
    4.
   
    5.
   
    6.  }
   
    2、Java中的范型不能像C++那么灵活。
   
    1. <T>  T  add(T a,T b)
   
    2.
   
    3. {
   
    4.
   
    5.  //return  a+b   ;//很多人以为java也想C++一样可以这样 ,但是不可以 .
   
    6.
   
    7.  return  null;
   
    8.  }
   
    这个返回的null 也是有类型限制的,比如上面的a b分别是Integer和String 那么就会取他们共同的基类Object做为返回值类型,其他的同理。
   
    3、实现任意类型的数组的成员值的
交换,注意在自定义范型中范型的实际类型只能是引用数据类型,不能是基本数据类型。
   
    1.  public  static <T> void  swap(T[]a,int x,int y)
   
    2.  {
   
    3.  T  tem  =a[x]  ;
   
    4.  a[x]=a[y]  ;
   
    5.  a[y]=tem ;
   
    6.
   
    7.   }
   
    上面这个方法如果我swap(new Integer[]{1,2,3,4,5},1,2); //这样就会自动
交换下标1 2的值
   
    但是这样调用就错了swao(new int[]{1,2,3,5,6},2,3) ; //所以说Java的范型的实际类型只能是引用数据类型
   
    4、
   
    <T extends String> 表示类型只能是String或者String的派生类
   
    <T super String > 表示范型类型只能是String或者String的父类
   
    用法同上
   
    5、下面这个函数利用范型来实现类型自动转换的功能。
   
    1. public static  <T> T autoConvert(Object obj)
   
    2. //因为返回值是 T标识任意类型 所哟可以 将返回结果赋值给任意类型对象
   
    3.  {
   
    4.  return (T)obj;
   
    5.  }
   
    6.  Object  obj=="";
   
    7.
   
    8.  String str=autoConvert(obj);
   
    可以完成自动转换,因为范型T代表任意类型,因此他可以赋值给String类型的对象。
   
    6、将任意类型的对象填充到任意类型的数组中,与是fillArray(new Integer[]{2,3,4},"ddd"); 这样调用是正确的,这样做忽略类型限制。
   
    1. public  static <T> void  fillArray(T[] a,T b)  //将任意一个对象填充到任意类型的数组
   
    2.{
   
    3. for(int i =0;i<a.length;i++)
   
    4. {
   
    5. a[i] =b ;
   
    6. }
   
    7.}
   
    7、以自定义范型的形式显示一个集合的数据,下面一个是利用自定义范型一个是利用通配符来实现,但是不同的是利用通配符操作的集合不能向集合中插入元素
   
    但是自定义范型却可以。原因是通配符代表的集合我们不知道集合内部具体元素 是什么类型 所以 不能对集合进行add操作。
   
    1. public static  <T> void showCollection(Collection<T> col,T  obj)  //利用范型来输出任意类型集合
   
    2. {
   
    3.  col.add(obj) ;
   
    4.  for(T a:col)
   
    5.  {
   
    6.  System.out.println(a);
   
    7.  }
   
    8.  }
   
    9.
   
    10.  public static void showCollection(Collection<?> col)  //利用范型来输出任意类型集合
   
    11. {
   
    12.  for(Object obj:col)
   
    13.  {
   
    14.  System.out.println(obj);
   
    15.  }
   
    16.  }
   
    8、如果一个类中多个方法都需要范型,那么就是用类级别的范型。
   
    例如:
   
    1. class  A<E>
   
    2.
   
    3. {
   
    4.
   
    5.  public void  add(E obj){}
   
    6.
   
    7.  public  E  get(){}
   
    8.
   
    9.  private E data;
   
    10. }
   
    这样声明范型和在函数前面声明其实是一样的,只不过是在类的级别上作用于整个类而已。
   
    9、 要注意范型只是给编译器看的。
   
    也就是说Vector<Integer> Vector<String> 他们用到的都是同一份字节码,字节码只有class文件加载到内存中的时候才有。
   
    所以在一个类中下面2个方法不能同时存在。
   
    void show(Vector<Integer>) {}
   
    void show(Vector<String>){}
   
    这两个方法都不是重载,因为编译后要去掉类型信息

 

 

—————————————————————————
温馨提示:因考试政策、内容不断变化与调整,学课在线提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!
>>长期招聘兼职招生代理,有意请联系我们;团报优惠、项目合作咨询:13312524700(微信)
课程试听.报名  >>题库.做题
>>直播课程
>>录播课程

课程名称  课程试听
课程名称
课程试听
初级会计师

一级建造师

中级会计师

二级建造师

注册会计师

造价工程师

经济师考试

监理工程师

银行从业

安全工程师

基金从业

消防工程师

人力资源师

法律职业资格
社会工作者   
消防设施操作

教师资格证
成人高考
执业药师
自考辅导课

护士资格证

考研辅导课

心理咨询师
公共营养师

公务员培训
文职培训
考研培训
统招专升本
计算机软考
咨询工程师
养老护理员
房产经纪人

税务师培训
其它课程>>
翻译资格
事业单位培训

热点推荐
  • 【税务师考试成绩查询网址】:https://ksbm.ecctaa.cn/mould2.html#/e/shuiwushi/login
    2025-02-13 3019
  • 2022年税务师考试准考证打印入口:中国注册税务师协会
    2022-06-20 3035
  • 海南2011年注册税务师考试证书办理公告
    2012-03-03 60
网友评论
热门评论