时间:2021-05-20
泛型简介
什么是泛型?
为什么要使用泛型?
泛型是进行类型设计或方法定义时的一种约束规范,基于此规范可以:
说明:泛型应用相对比较简单,难点在泛型类或方法的设计上,通过这样的设计如何对现有类进行减法设计,提高类或方法的通用性.
泛型应用类型
泛型定义时常用方式有三种(可参考List<E>,Map<K,V)等接口定义):
泛型类定义及应用
类泛型定义:(用于约束类中方法参数和方法返回值类型)
class Array<T>{//类泛型:类名<泛型> Object[] array=new Object[10]; public void add(T t){}//通过类泛型约束方法参数类型 public T get(int i){//通过类泛型约束方法返回值类型 return (T)array[i]; }}泛型接口定义及应用
定义接口时指定泛型,用于约束接口方法参数类型以及方法返回值类
interface Task<Param,Result>{//思考map中的泛型Map<K,V> /** * 此方法用于执行任务 * @param arg 其类型由泛型参数Param决定 * @return 其类型由泛型参数result决定 */ Result execute(Param arg);}泛型接口应用实践
class ConvertTask implements Task<String,Integer>{ @Override public Integer execute(String arg) { // TODO Auto-generated method stub return Integer.parseInt(arg); }}泛型定义及应用
泛型方法中的泛型仅仅应用于当前方法,主要应用于一些静态方法,当然非静态方法也可以应用。
class ObjectFactory{ /**泛型方法*/ public static <T>T newInstance(Class<T> cls){ return (T)cls.newInstance(); }}泛型应用通配符应用
无界限定通配符
泛型无界通配符使用”?”进行表示,可以代表一种任意参数类型(实参类型)。一般应用于变量的定义。例如:Class<?> c1;
Class<?> c=Class.forName("java.util.Date");上届界限定通配符
泛型上届限定符通过“<? extends 类型>”方式进行实现,主要用于方法参数或方法的返回值类型,例如:
static void doPrint(List<? extends CharSequence> list){ System.out.println(list);}下届限定通配符
泛型下届限定符通过“<? super 类型>”方式进行实现,主要用于方法参数或方法的返回值类型,例如:
static void doPrint(Set<? super Integer> set){ System.out.println(list);}泛型类型擦除实践分析
泛型是编译时的一种类型,在运行时无效,运行时候都会变成Object类型,例如:
ArrayList<String> list = new ArrayList<String>();list.add("A");//list.add(100);//直接不可以//通过反射将100添加到集合list.getClass().getMethod("add", Object.class).invoke(list, 100);System.out.println(list);总结(Summary)
本小节对泛型的定义,应用场景,应用类型以及泛型的类型擦出进行了分析和实践,希望在后续项目实践中对泛型有一个更好的认识。
以上就是Java 泛型全解析的详细内容,更多关于Java 泛型的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
泛型是Java开发中常用的技术,了解泛型的几种形式和实现泛型的基本原理,有助于写出更优质的代码。本文总结了Java泛型的三种形式以及泛型实现原理。泛型泛型的本质
本文实例讲述了Java泛型类与泛型方法的定义。分享给大家供大家参考,具体如下:Java泛型类的定义一点睛泛型类定义的语法如下:[访问修饰符]class类名称泛型
java泛型方法:泛型是什么意思在这就不多说了,而Java中泛型类的定义也比较简单,例如:publicclassTest{}。这样就定义了一个泛型类Test,在
一、泛型的基本概念java与c#一样,都存在泛型的概念,及类型的参数化。java中的泛型是在jdk5.0后出现的,但是java中的泛型与C#中的泛型是有本质区别
在Java中,泛型的引入是为了在编译时提供强类型检查和支持泛型编程。为了实现泛型,Java编译器应用类型擦除实现:1、用类型参数(typeparameters)