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. Leetcode 558.四叉树交集

    四叉树交集 四叉树是一种树数据,其中每个结点恰好有四个子结点:topLeft.topRight.bottomLeft 和 bottomRight.四叉树通常被用来划分一个二维空间,递归地将其细分为四个 ...

  2. Linux下c++使用pthread库

    pthread 库是纯c库,没有类指针的概念,当想phread_create中传递类成员函数时,就会报错,这里针对这种情况,对线程创建做了必要封装,较为简单,继承类,实现run接口,然后使用start ...

  3. [报错处理]Could not find a version that satisfies the requirement xml (from versions)

    安装xml库发生报错 pip3 install xml Collecting xml Could not find a version that satisfies the requirement x ...

  4. CodeForces Round #515 Div.3 B. Heaters

    http://codeforces.com/contest/1066/problem/B Vova's house is an array consisting of nn elements (yea ...

  5. C/C++注释规范

    C/C++注释规范 Doxygen是一种开源跨平台的,以类似JavaDoc风格描述的文档系统,完全支持C.C++.Java.Objective-C和IDL语言,部分支持PHP.C#.鉴于Doxygen ...

  6. 想象一下(imagine)

    想象一下(imagine) 题目描述 我们高大的老班举起了有半个他那么高的三角板,说:"你们想象一下--" 于是你就陷入了想象-- 有一棵n个点的树,每个叶子节点上都有一个人,他们 ...

  7. Nature Reserve

    Nature Reserve time limit per test:2 seconds memory limit per test:256 megabytes input:standard inpu ...

  8. poj 1743 Musical Theme 后缀自动机/后缀数组/后缀树

    题目大意 直接用了hzwer的题意 题意:有N(1 <= N <=20000)个音符的序列来表示一首乐曲,每个音符都是1..88范围内的整数,现在要找一个重复的主题."主题&qu ...

  9. nginx进行项目域名配置时提示Job for nginx.service failed

    ps aux | grep nginx /bin/systemctl stop nginx.service /bin/systemctl start nginx.service /bin/system ...

  10. Bzoj1974 [Sdoi2010]auction 代码拍卖会

    Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 375  Solved: 151 Description 随着iPig在P++语言上的造诣日益提升,他形成 ...