1 泛型的基本应用

//反射方式 指定类型,就不用强转
Construcctor<String> constructor = String.class.getConstructor(Stringbuffer.class);

泛型是提供给javac编译器使用的,可以限定集合输入的类型,
编译器编译带类型说明的集合时,会除掉类型信息,
返回的数据类型不用强转

2 泛型的内部原理和更深应用

ArrayList<Integer> collection1 = new ArrayList<Integer>();
collection1.getClass().getMethod("add",Objec.class).invoke(collection1,"abc");
collection1.get(0);//abc

泛型是给编译器看的
例子:
ArrayList<E> E称为参数类型或类型参数

泛型里面参数不要考虑父子关系
Collecion<Object>!= Collection<Integer>

3 泛型的通配符?

Collection<?>
使用?通配符可以引用其他参数化的类型,?通配符定义的
变量主要用作引用,可以调用与参数化无关的方法,不能调用与
参数化有关的方法。

泛型中的?通配符的扩展
限定通配符的上边界:
Vector<? extends Number> x = new Vector<Integer>();
限定通配符的下边界:
Vector<? super Integer> x = new Vector<NUmber>();

限定通配符总是包括自身

HashMap<String,Integer> maps = new HashMap<String,Integer>();
maps.put("zxx",28);
maps.put("lhm",35);
maps.put("flx",35); Set<Map.Entry<String,Intger>> entrySet = maps.entrySet();
for(Map.Entry<String,Intger> entry:entrySet){
entry.getKey()+":"+entry.getValue();
}

4 自定义泛型方法及应用

  swap(new String[]{"abc","dw","dsf"},1,2)

    public static <T> void swap(T[] a,int i,int j){
T tmp = a[i];
a[i] =a[j];
a[j] = tmp;
} Object obj ="abc";
String x2= autoConvert(obj); private static <T> T autoConvert(Object obj){
return (T)obj;
} private static <T> fillArray(T[] a, T obj){
for(int i=0;i<a.length;i++){
a[i] = obj;
}
}

泛型的应用在返回值之前用<T> 来表示
然后在实际应用中根据实际类型值进行参数应用

类泛型

public class GenericDao<E>{
public <E> void add(E x){
} public E findById(int id){
return null;
} public void delete(E obj){
} public void update(E obj){
} public Set<E> findByConditions(String where){
return null;
}
} GenericDao<ReflectPoint> dao - new GenericDao<ReflectPoint>();
dao.add(new ReflectPoint(3,3));

静态方法不能用类的泛型

5 通过反射获取泛型实际类型参数
编译完成之后去类型化

   Method applyMethod = GenericTest.class.getMethod("applyVector",Vector.class);
Type[] types = applyMethod.getGenericParameterTypes();
ParameterizeType pType = (ParameterizeType)Types[0];
pType.getRawType();
pType.getActualTypeArguments()[0]; public static void applyVector(Vector<Date> v1){ }

java基础篇5之泛型的更多相关文章

  1. [C# 基础知识梳理系列]专题六:泛型基础篇——为什么引入泛型

    引言: 前面专题主要介绍了C#1中的2个核心特性——委托和事件,然而在C# 2.0中又引入一个很重要的特性,它就是泛型,大家在平常的操作中肯定会经常碰到并使用它,如果你对于它的一些相关特性还不是很了解 ...

  2. java基础篇---I/O技术

    java基础篇---I/O技术   对于任何程序设计语言而言,输入输出(I/O)系统都是比较复杂的而且还是比较核心的.在java.io.包中提供了相关的API. java中流的概念划分 流的方向: 输 ...

  3. 金三银四跳槽季,BAT美团滴滴java面试大纲(带答案版)之一:Java基础篇

    Java基础篇: 题记:本系列文章,会尽量模拟面试现场对话情景, 用口语而非书面语 ,采用问答形式来展现.另外每一个问题都附上“延伸”,这部分内容是帮助小伙伴们更深的理解一些底层细节的补充,在面试中可 ...

  4. java基础篇---HTTP协议

    java基础篇---HTTP协议   HTTP协议一直是自己的薄弱点,也没抽太多时间去看这方面的内容,今天兴致来了就在网上搜了下关于http协议,发现有园友写了一篇非常好的博文,博文地址:(http: ...

  5. java基础篇---I/O技术(三)

    接上一篇java基础篇---I/O技术(二) Java对象的序列化和反序列化 什么叫对象的序列化和反序列化 要想完成对象的输入或输出,还必须依靠对象输出流(ObjectOutputStream)和对象 ...

  6. Java基础之多态和泛型浅析

    Java基础之多态和泛型浅析 一.前言: 楼主看了许多资料后,算是对多态和泛型有了一些浅显的理解,这里做一简单总结 二.什么是多态? 多态(Polymorphism)按字面的意思就是“多种状态”.在面 ...

  7. Java基础篇 - 强引用、弱引用、软引用和虚引用

    Java基础篇 - 强引用.弱引用.软引用和虚引用 原创零壹技术栈 最后发布于2018-09-09 08:58:21 阅读数 4936 收藏展开前言Java执行GC判断对象是否存活有两种方式其中一种是 ...

  8. java基础篇 之 构造器内部的多态行为

    java基础篇 之 构造器内部的多态行为 ​ 我们来看下下面这段代码: public class Main { public static void main(String[] args) { new ...

  9. 小白—职场之Java基础篇

    java基础篇 java基础 目录 1.java是一种什么语言,jdk,jre,jvm三者的区别 2.java 1.5之后的三大版本 3.java跨平台及其原理 4.java 语言的特点 5.什么是字 ...

随机推荐

  1. Zookeeper ZooDefs.Ids

    OPEN_ACL_UNSAFE  : 完全开放的ACL,任何连接的客户端都可以操作该属性znode CREATOR_ALL_ACL : 只有创建者才有ACL权限 READ_ACL_UNSAFE:只能读 ...

  2. 【转】UGUI之用脚本动态的改变Button的背景图片 和 颜色

    http://blog.csdn.net/u014771617/article/details/45102701 public Button button;void Start(){ColorBloc ...

  3. AsyncSocket

    如果需要在项目中像QQ微信一样做到即时通讯,必须使用socket通讯,本人也是刚学习,分享一下,有什么不对的地方希望大家指正 ios原生的socket用起来不是很直观,所以我用的是AsyncSocke ...

  4. BZOJ 1877:[SDOI2009]晨跑(最小费用最大流)

    晨跑DescriptionElaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现在给出一张学校附近的地图,这张地图中包含N个 ...

  5. CSA Round #84 The Sprawl

    题目 Analysis 曼哈顿距离($L1$ metric)最小生成树. Implementation 下面的代码参考了 gispzjz 在比赛中的提交. #include <bits/stdc ...

  6. openssl-1.0.1c交叉编译动态库(转)

    linux编译相关(13)  版权声明:本文为博主原创文章,未经博主允许不得转载. #交叉编译openssl ------直接修改Makefile新加这一行:CROSS_COMPILE= arm-un ...

  7. Normalize.css用法

    1 Normalize.css用法 重置样式非常多,Normalize.css和reset是两个常用的重置 CSS 文件 http://necolas.github.io/normalize.css/ ...

  8. 上传图片获取base64位编码

    function loadImg(){ //获取文件 ].files[]; //创建读取文件的对象 var reader = new FileReader(); //创建文件读取相关的变量 var i ...

  9. 【05】js异步编程理解

    1.概念 同步:一个任务等待前一个任务结束,然后再执行,程序的执行顺序与任务的排列顺序是一致的.同步的.异步:每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务, ...

  10. POJ1927 Area in Triangle

      Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 1458   Accepted: 759 Description Give ...