java关于泛型与自定义泛型的使用
2013-03-13 17:05
225 查看
泛型的应用在java里也是很普遍的,jdk1.5之前,如果将一个String类型的对象添加到一个集合中,可能会出现这样的状况,由于程序员的疏忽,将String类型的对象转成了其他类型的对象。所以说,泛型的出现,解决了对象失去特性的问题。
泛型的使用,是给编译器看的,以免ClassCastException的出现。与此同时,为了提高效率,编译过后的class会主动擦除之前泛型信息。
泛型的使用场景一般是集合,未定义泛型与定义泛型的集合的差别:
自定义泛型:泛型要先声明,后使用在方法修饰词后声明<T>,或者声明多个<T,E,K>,如果多个方法都使用到了泛型,可以直接在类名上声明泛型<T>或者<T,E,K>,如public class HelloWorld<T,E> { ...},在类上声明的泛型,在静态方法中是无法使用的。
下面是如何使用泛型,将任意类型的数组进行内容颠倒:
泛型的使用,是给编译器看的,以免ClassCastException的出现。与此同时,为了提高效率,编译过后的class会主动擦除之前泛型信息。
泛型的使用场景一般是集合,未定义泛型与定义泛型的集合的差别:
//没有使用泛型的List集合 public void noGenerics(){ List list = new ArrayList<>(); list.add(new Date()); Date myDate = (Date) list.get(0); System.out.println(myDate); } //使用了泛型的List集合 public void haveGenerics(){ List<Date> list = new ArrayList<Date>(); list.add(new Date()); Date myDate = list.get(0); System.out.println(myDate); }从上述代码可以看出,未使用泛型的集合,当对象存入集合之后,取出对象时,并不知道其对象是何种类型,所以加了一个强转的动作。而使用泛型的方便之处在于其出的对象就是原本定义的泛型类型,不需要进行强转,减少了出错的可能性。
自定义泛型:泛型要先声明,后使用在方法修饰词后声明<T>,或者声明多个<T,E,K>,如果多个方法都使用到了泛型,可以直接在类名上声明泛型<T>或者<T,E,K>,如public class HelloWorld<T,E> { ...},在类上声明的泛型,在静态方法中是无法使用的。
import java.util.Date; public class GenericsTest { public static void main(String[] args) { printObject(new Date()); printObject("java"); } // 自定义泛型方法,泛型要先声明,后使用。 public static <T> void printObject(T t) { System.out.println(t.toString()); } // 自定义泛型方法,多个泛型参数的使用 public static <T, E, K> void printObject(T t, E e, K k) { //..... } }
下面是如何使用泛型,将任意类型的数组进行内容颠倒:
public class Test { public static void main(String[] args) { Integer arr[] = { 2, 5, 7, 4, 8 }; reverse(arr); for (int i : arr) { System.out.println(i); } } //使用泛型颠倒任意数组的内容。 public static <T> void reverse(T arr[]) { int start = 0; int end = arr.length - 1; while (true) { if (start >= end) { break; } T temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; start++; end--; } } }
相关文章推荐
- 关于java泛型的使用方式。。。。
- 关于打包自定义标签,并导入项目使用时,出现java.lang.NoClassDefFoundError: JspException异常,解决方法和注意事项!
- 关于Java泛型使用的问题记录
- 关于set或map的key使用自定义类型的问题
- Java中关于使用logback做日志脱敏
- 关于java的测试工具junit的使用的介绍
- java 内部类 匿名内部类 匿名类结合泛型 使用 详细教程 讲解
- Java 理论与实践: 使用通配符简化泛型使用 (二)
- 关于java中可变长参数的定义及使用方法详解
- Java 程序 关于Properties 类使用Store方法时不能会覆盖以前Properties 文件的内容
- 【Java】关于泛型:泛型类、泛型接口和泛型方法
- 关于java容器使用和Comparator小程序
- 关于自定义indexbar使用paint画笔实时显示索引listview的header首字母和header对应的列表首个字符
- 关于使用java语言操作FTP的一些问题
- 关于在Java使用反射对属性取值和赋值的性能问题。
- 关于Android里面color.xml的自定义使用
- 关于java中使用Session时出现空指针异常的问题
- Java关于线程池的使用
- java使用闭环数组自定义高性能队列
- Java基础---Java---基础加强---内省的简单运用、注解的定义与反射调用、 自定义注解及其应用、泛型及泛型的高级应用、泛型集合的综合