40_自定义泛型方法及其应用

java的泛型不同于C++的模板方法那么强大。java的泛型只停留在编译阶段,编译通过后泛型特征被擦除,主要因为保证jvm的效率。

 

  • 用泛型知识,写一个交换数组元素的方法(此方法只适合于引用类型数组!因为int[]不会自动转为Integer[]!)

 

private static <T> void swap(T[] a,int i,int j){
    T tmp=a[i];
    a[i]=a[j];
    a[j]=tmp;
}

String[] arr=new String[]{"123","789","456"};
//打印出123789456
for(String s:arr){
    System.out.print(s);
}
swap(arr,1,2);
System.out.println();
//打印出123456789
for(String s:arr){
    System.out.print(s);
}

 

注意:

  1. <T>的位置---方法返回值之前

2.  T[]可以接收的实参类型---引用类型

若基本类型数组,会报错。如 swap(new int[3],1,2); 会报错!

 

 

普通方法,构造方法,静态方法中都可以使用泛型。

也可以用类型变量表示异常,称为参数化的异常,可以用于方法的throws列表中,但是不能用于catch子句中。

private static <T extends Exception> sayHello()throws T

{

try{

}catch(Exception e){

     throw (T)e;

}

}

补充反射:

String[] arr=new String[]{"123","789","456"};
System.out.println(arr.getClass().getName());//[Ljava.lang.String;
System.out.println("abc".getClass().getName());//java.lang.String

int[] arr2=new int[]{1,3,2};
System.out.println(arr2.getClass().getName());//[I
System.out.println(int.class.getName());//int

Integer[] arr3=new Integer[]{1,3,2};
System.out.println(arr3.getClass().getName());//[Ljava.lang.Integer;
System.out.println(Integer.class.getName());//java.lang.Integer
时间: 2024-11-07 12:31:43

40_自定义泛型方法及其应用的相关文章

41_自定义泛型方法的练习与类型推断总结

编写一个泛型方法,自动将Object类型的对象转换成其他类型. //编写一个泛型方法,自动将Object类型的对象转换成其他类型.      private static <T> T autoConvert(Object obj){ return (T)obj; } 定义一个方法,可以将任意类型的数组中的所有元素填充为相应类型的某个对象. //定义一个方法,可以将任意类型的数组中的所有元素填充内容为相应类型的某个对象 private static <T> void fillArra

JAVASE(十五) 泛型 :泛型用例、自定义泛型类、通配符

1.泛型在集合中的使用 1.1 在集合中使用泛型之前的例子 ? 为什么要有泛型(Generic)? 1. 解决元素存储的安全性问题2. 解决获取数据元素时,需要类型强转的问题 ? ? 1.2 在集合中使用泛型例子1 List<String> list = new ArrayList<String>(); list.add("aaaa"); List<Integer> list2 = new ArrayList<Integer>(); li

java 泛型 窜讲

一.为什么使用泛型      复用性:泛型的本质就是参数化类型,因而使用编写的泛型代码可以被许多不同类型的对象所复用.      安全性:在对类型Object引用的参数操作时,往往需要进行显式的强制类型转换.这种强制类型转换需要在运行时才能被发现是否转换异常,通过引入泛型能将在运行时才能检查类型转换,提前到编译时期就能检查. 二.自定义泛型 java中自定义泛型分为三种:泛型类.泛型接口.泛型方法. 下面使用一个案例演示泛型类.泛型方法,泛型接口类似,所以不再演示. // 自定义泛型类publi

Java基础学习——泛型

一.泛型方法 1 /** 2 3 自定义泛型:自定义泛型可以理解为是一个数据类型的占位符,或者理解为是一个数据类型的变量. 4 5 泛型方法: 6 泛型方法的自定义格式:修饰符<声明自定义泛型>返回值类型 函数名称(形参列表) 7 在自定义泛型方法上泛型的具体类型是调用该方法的时候传入参数的类型所确定的 8 9 */ 10 public class demo1 { 11 public <T>T printf (T t){ 12 return t; 13 } 14 public st

黑马程序员-张老师基础5-泛型

泛型: 泛型只是提供给编译器.在编译完之后,生产字节码文件时就擦除类型信息,<>泛型就不在了 泛型的术语: 整个Arraylist<E>:称为泛型类型. Arraylist<E>中的E称为类型变量或类型参数 整个Arraylisst<Integer>称为:参数化的类型 Arraylist<Integer>中的Integer称为类型参数的实例. Arraylist<Integer>中的<>是typeof Arraylist称

关于Java泛型的新解

////////////////////////////////////////////////////////////////////////////////为了方便您的观看,请在web版式视图在观看本文章.////////////////////////////////////////////////////////////////////////////////////////////// <关于泛型> -----------------------------------à入门泛型的基

黑马程序员 - 泛型和基本类型包装类

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 泛型好处:1.将运行时期的ClassCastException,转移到了编译时期 方便程序员解决问题,让运行时期问题减少. 2.避免了强制转换.泛型格式:通过<>来定义要操作的引用数据类型.通常在集合框架中很常用.泛型类:当类中需要操作的引用数据类型不确定的时候,早期用Object来实现扩展.现在运用泛型类. 当方法中需要操作的引用数据类型不确定的时候,可以运用泛型方法.特殊之处:静态方法,

java新特性下

泛型 为什么需要泛型,什么是泛型? 对象类型数据保存到集合中时,会丢失其类型,取出时变成Object类型,Object类型需要强转回丢失的数据类型,这容易导致程序员的误操作问题,带来安全性!泛型就是给集合强制其只能保存一种数据类型,从而不会出现元素数据类型丢失问题!! package 泛型; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Linke

传智博客(JavaWeb方面的所有知识)听课记录(经典)

一.       JavaWeb基础 第一天: 1.Eclipse详解: (1).Bad versionnumber in .class file:编译器版本和运行(JRE)版本不符合.高的JRE版本兼容低版本的编译器版本. (2).当程序有错误的时候,使用Debug as 运行程序.双击语句设置断点.程序运行到此处停止.点击跳入方法的内部代码.点击跳过,执行下一条代码,点击跳出,跳出方法.观察变量的值,选中变量右击 选择watch. 跳入下一个断点.查看断点,调试完后一定要清除断点.结束运行断