今天就跟大家聊聊有关深入浅析Java 中的泛型,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
泛型简介
什么是泛型?
泛型是进行类型设计或方法定义时的一种约束规范,基于此规范可以:
泛型应用类型
泛型定义时常用方式有三种(可参考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);
看完上述内容,你们对深入浅析Java 中的泛型有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。