泛型的本质就是将数据类型也参数化, 普通方法的输入参数的值是可以变的,但是类型(比如: String)是不能变的,它使得了在面对不同类型的输入参数的时候我们要重载方法才行. 泛型就是将这个数据类型也搞成跟参数的值一样可以变的.

  泛型分为泛型接口,泛型类和泛型方法. 泛型接口,泛型类大家都比较熟悉了,应该都用过List, ArrayList. List就是泛型接口,ArrayList就是泛型类,我们经常看到List <E>的声明, new ArrayList<E>()的定义, 这里面的E可以是String, 也可以自己定义的类. 我感觉泛型类就JDK提供的就基本够用了,自定义使用的场景非常少了. 反而是泛型方法,对与解析自定义数据结构非常有用, 类似于toString这种场景是百试不爽.

-----------------------------------------------------------泛型方法应用实例--------------------------------------------

泛型方法不一定要在泛型类里面

定义:

1. 函数上的泛型定义

          当函数中使用了一个不明确的数据类型,那么在函数上就可以进行泛型的定义。

          public <泛型的声明> 返回值类型  函数名( 泛型 变量名  ){

          }

 例如:

package Test;

import org.junit.Test;

public class fanxing {

    /**
* 定义一个泛型方法,泛型方法也可以声明为static
*@param t1
*/
// public static <T> void testFanxing(T t1){
public <T> void testFanxing(T t1){
System.out.println(t1);
} //测试泛型类
@Test
public void test1(){
fanxing fx=new fanxing();
fx.testFanxing(2);
fx.testFanxing("字符串");
fx.testFanxing(new User("1", "QLQ"));
}
} //用于测试泛型类的类
class User{
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
protected User(String id, String name) {
super();
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + "]";
} }

 结果:

aaarticlea/png;base64,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" alt="" />

-----------------------------------------------------------泛型类应用实例--------------------------------------------

package Test;

import org.junit.Test;

//可以有一个,也可以有多个
public class fanxinglei<T, T2> {
// 泛型属性
private T t1; public T getT1() {
return t1;
} public void setT1(T t1) {
this.t1 = t1;
} // 泛型方法
public void testFanxing(T2 t2) {
System.out.println(t2);
System.out.println(this.getT1());
} public static void main(String[] args) {
fanxinglei<String, Integer> fanxinglei = new fanxinglei<String, Integer>();
fanxinglei.setT1("泛型类");
fanxinglei.testFanxing(4);
}
}

测试:

aaarticlea/png;base64,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03fAdDvw8V7ZVfvapeoYAqdL1NljDphAj9AAbEN1R+Nfw9m2tw6yPJPGXVvGyiVi/P5ni167WCYy/KluWJn4c9//uGV2oibd2tf4gDZBdYVLcCPtnd/kmxPDcbANzDrphnmNPOtst8OHItwQeYIFzmH/7gusXHyD9L+xDbMSa7gEw90ULlVPF9NM17pyMQ9gtcKlhnPG622eJPP4S89dGbplM/8rBBg/N+MIl6qTHhUu3id7zeFSc7po81ptYmwDqzFcqp91MYWLdb/d90jw6k/0O5fAoANXH8azbWXhEviINF8WhcdgW3z617p2xisAbQDmc9d7x5oui8Lb13JZFNq1msIlfKkWGL87inTa9K4zr+eC10re/dDJoaeaod18WeTNZsa/8DRPesRlkfnCLTpcAqeIUu5PiwKnii+Jq76ZIwZmvSwyZpPlrIsjXCwnWMbwTi/ttPjvuZQ+9/UrTd8yIN7LosoLNKXTvrMragz6B63+tVmtgpMbHIBhqNrZVD4fqq50tOc2f6Eb3rVq4ZIN/MKL5QCGMsS2mXY4/W3llnymyUmnQ9/bWtvD4aK/uBZMEZPuOwj6kkpvrCNczE8T/BzSz8lalpTGgdkm3bDQizzrYgkX83snG5608u4n7Zfo4KppbR7V23qNJ8uSdtb2hlrZQY5/l1Y2nlWWzxAuiZHPNPk+LVZymoUWLKsmMeGSrfIbujU+xwr3Kc5JX3VZwiU5tEVpok4yXWLCZa1I8qQTLgBExBAurwFACCsXACIIFwAiCBcAIggXACIIFwAiCBcAIkTCJd/R3KBfAAWwVkj8VXRHs9Pc3Ey4AA+02MMl39HsNHfkw38XC+CBEnO45DuaK/9eJ+ECPMDiDZdKpBAuwAMuznDx/RthhAvwYIsvXPxxQrgAD7jYwiX8LzK7mjsS9o9QAIiF1C/RsXIBHnCECwAR/Po/ABGECwARhAsAEYQLABGECwARhAsAEYQLABGECwARhAsAEbLh4v2FUY0b19gIYO2LM1y8IIjIlPBfNnod9e31pwrcAJAIMa9caokAW3AE+tpyB0AiCF4W2RIhOlzM/3CDf6UDYO2LLVxq+cbEFhasXID7j+x3LsblRi2XRXznAiSd+I+ibckS8VDV6ykAa5/4j6Ij7gYequXCCkBSCP60qGou2NKEL3SB+4DIdy4q8tKm9tTg21wguUR+WlRjKNR+lcSaBUic+L9zCYeC/iPnqpc8ETlCxAAJwh8uAhBBuAAQQbgAEEG4ABBBuAAQQbgAEEG4ABBBuAAQQbgAEEG4ABBBuAAQQbgAEEG4ABBBuAAQQbgAEEG4ABBBuAAQQbgAEEG4ABBBuAAQQbgAEEG4ABBBuAAQQbgAEEG4ABBBuAAQQbgAEEG4ABBBuAAQQbgAEEG4ABBBuAAQQbgAEEG4ABBBuAAQQbgAEEG4ABBBuAAQQbgAEEG4ABBBuAAQQbgAEEG4ABBBuAAQQbgAEEG4ABBBuAAQQbgAEEG4ABBBuAAQQbgAEEG4ABBBuAAQQbgAEEG4ABBBuAAQQbgAEEG4ABBBuAAQQbgAEEG4ABBBuAAQQbgAEEG4ABBBuAAQQbgAEEG4ABBBuAAQQbgAEEG4ABBBuAAQQbgAEEG4ABDx/6fFRiNP4Ss8AAAAAElFTkSuQmCC" alt="" />

-----------------------------------泛型接口应用实例------------

public class Demo8 {
public static void main(String[] args) {
MyInter<String> my = new MyInter<String>();
my.print("泛型"); MyInter2 my2 = new MyInter2();
my.print("只能传字符串");
}
} interface Inter<T> {
void print(T t);
} // 实现不知为何类型时可以这样定义
class MyInter<T> implements Inter<T> {
public void print(T t) {
System.out.println("myprint:" + t);
}
}
//使用接口时明确具体类型。
class MyInter2 implements Inter<String> { @Override
public void print(String t) {
System.out.println("myprint:" + t); } }

-----------------------------------泛型通配符应用实例------------------------

需求:

定义一个方法,接收一个集合对象(该集合有泛型),并打印出集合中的所有元素。

例如集合对象如下格式:

Collection<Person> coll = new ArrayList<Person>();
coll.add(new Person("jack", 20));
coll.add(new Person("rose", 18));
Collection<Object> coll2 = new ArrayList<Object>();
coll2.add(new Object());
coll2.add(new Object());
coll2.add(new Object()); Collection<String> coll3 = new ArrayList<String>();
coll3.add("abc");
coll3.add("ddd");
coll3.add("eee");

分析,集合对象中的元素的类型是变化的,方法的形参的那么泛型类型就只能定义为Object类型.

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator; public class Demo9 {
public static void main(String[] args) {
ArrayList<Object> arr = new ArrayList<Object>();
arr.add(new Object());
arr.add("String");
print(arr); //将集合的泛型设置类String类型,是Object子类
HashSet<String> hs = new HashSet<String>();
hs.add("hello");
hs.add("jack");
//由于print方法接收的集合进行了元素限定,只接受限定为Object类型的集合,编译不通过
//print(hs);
} public static void print(Collection<Object> coll) {
Iterator<Object> it = coll.iterator();
while (it.hasNext()) {
Object next = it.next();
System.out.println(next);
}
}
}

但是,由于print方法接收的集合进行了元素限定,只接受限定为Object类型的集合,编译不通过该问题如何解决?

可以把方法的形参的泛型去掉,那么方法中就把集合中的元素当做Object类型处理.

也可以使用使用泛型通配符

public class Demo9 {
public static void main(String[] args) {
ArrayList<Object> arr = new ArrayList<Object>();
arr.add(new Object());
arr.add("String");
print(arr); // 将集合的泛型设置类String类型,是Object子类
HashSet<String> hs = new HashSet<String>();
hs.add("hello");
hs.add("jack");
// 使用泛型通配符,编译通过。
print(hs);
} public static void print(Collection<?> coll) {
Iterator<?> it = coll.iterator();
while (it.hasNext()) { Object next = it.next();
System.out.println(next);
}
}
}

上述就使用了泛型通配符

通配符:?
public void show(List<?> list)
{
}
可以对类型进行限定范围。
?extends E: 接收E类型或者E的子类型。
? super E: 接收E类型或者E的父类型。

限定泛型通配符的边界

限定通配符的上边界:

extends

接收Number 类型或者Number的子类型

正确:Vector<? extends Number> x = new Vector<Integer>();
错误:Vector<? extends Number> x = new Vector<String>();

限定通配符的下边界

super

接收Integer 或者Integer的父类型

正确:Vector<? super Integer> x = new Vector<Number>();
错误:Vector<? super Integer> x = new Vector<Byte>();

总结:

  JDK5中的泛型允许程序员在编写集合代码时,就限制集合的处理类型,从而把原来程序运行时可能发生问题,转变为编译时的问题,以此提高程序的可读性和稳定

注意:

  泛型是提供给javac编译器使用的,它用于限定集合的输入类型,让编译器在源代码级别上,即挡住向集合中插入非法数据。但编译器编译完带有泛形的java程序后,生成的class文件中将不再带有泛形信息,以此使程序运行效率不受到影响,这个过程称之为“擦除”。

泛型的基本术语,以ArrayList<E>为例:<>念着typeof

  ArrayList<E>中的E称为类型参数变量

  ArrayList<Integer>中的Integer称为实际类型参数

  整个称为ArrayList<E>泛型类型

  整个ArrayList<Integer>称为参数化的类型ParameterizedType

Java泛型方法与泛型类的使用------------(五)的更多相关文章

  1. Java 泛型方法、泛型类、通配符、通配符上下限

    泛型方法 泛型方法定义规则: 所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前. 每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开.一个泛型 ...

  2. JAVA之旅(三十五)——完结篇,终于把JAVA写完了,真感概呐!

    JAVA之旅(三十五)--完结篇,终于把JAVA写完了,真感概呐! 这篇博文只是用来水经验的,写这个系列是因为我自己的java本身也不是特别好,所以重温了一下,但是手比较痒于是就写出了这三十多篇博客了 ...

  3. 20172302 《Java软件结构与数据结构》第五周学习总结

    2018年学习总结博客总目录:第一周 第二周 第三周 第四周 第五周 教材学习内容总结 查找 查找即在某项目组中寻找某一指定目标元素,或确定该组中并不存在此元素.对其进行查找的项目组称为查找池. 1. ...

  4. 20172305 2018-2019-1 《Java软件结构与数据结构》第五周学习总结

    20172305 2018-2019-1 <Java软件结构与数据结构>第五周学习总结 教材学习内容总结 本周内容主要为书第九章内容: 查找是在某个项目组中寻找到某一指定目标元素,或者确定 ...

  5. 20172328 2018-2019《Java软件结构与数据结构》第五周学习总结

    20172328 2018-2019<Java软件结构与数据结构>第五周学习总结 概述 Generalization 本周学习了第九章:排序与查找,主要包括线性查找和二分查找算法和几种排序 ...

  6. 使用C#反射中的MakeGenericType函数,来为泛型方法和泛型类指定(泛型的)类型

    C#反射中的MakeGenericType函数可以用来指定泛型方法和泛型类的具体类型,方法如下面代码所示这里就不多讲了,详情看下面代码一切就清楚了: using System; using Syste ...

  7. JAVA之旅(二十五)——文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine

    JAVA之旅(二十五)--文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine 我们继续IO上个篇 ...

  8. Java Spring Boot VS .NetCore (五)MyBatis vs EFCore

    Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...

  9. Java笔试面试题整理第五波

    转载至:http://blog.csdn.net/shakespeare001/article/details/51321498 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...

随机推荐

  1. JavaScript限制前端页面用户表单输入

    onkeyup事件 onkeyup 事件会在键盘按键被松开时发生. 内容来源:自成e家 1.只能输入数字 <input onkeyup = "value=value.replace(/ ...

  2. HNOI2017礼物

    礼物 这估计是最水,最无脑的一道题了 首先发现总和最接近时答案最小 发现答案就是\((\sum_{i=1}^{n}a[i]^2+b[i]^2)-2*max(\sum_{i=1}^{n}a[i]*b[i ...

  3. 2.9 C++使用默认参数的构造函数

    总结: 默认参数的构造函数,其默认参数必须置于参数列表的结尾. 设计类的构造函数的时候最好不要同时是用构造函数的重载和带参数的构造函数. 我们可以想象一个这样的场景:某一天书店整理库存,发现了一些非常 ...

  4. FreeRTOS 中 systick 相关配置

    @2018-7-16 > systick 属性配置 在文件 <port.c> 中函数 void vPortSetupTimerInterrupt( void ) 中配置计数周期.时钟 ...

  5. 01---JMS与消息中间件的基本概念

    JMS消息服务介绍和使用场景 什么是JMS JMS : Java Message Service(Java消息服务),Java平台中关于面向消息中间件的接口. 重点在于接口,接口就意味着与JDBC类似 ...

  6. 获取泛型的class 反射

    最近在使用Google的Gson包进行Json和Java对象之间的转化,对于包含泛型的类的序列化和反序列化Gson也提供了很好的支持,感觉有点意思,就花时间研究了一下. 由于Java泛型的实现机制,使 ...

  7. pthread_cond_wait() 函数的使用

    1. 首先pthread_cond_wait 的定义是这样的 The pthread_cond_wait() and pthread_cond_timedwait() functions are us ...

  8. 运行vb写的程序,有些电脑上会弹出一个与office相关的窗口

    到网上搜索了一下,找了几个解决方案,不过我的电脑上没出现过,所以先收藏一下,或许以后能用上. 来自:http://bbs.csdn.net/topics/380204412 今天将注册表的项一个个删除 ...

  9. 金融量化分析【day113】:PGEC策略

    一.PGE简介 二.PGE代码 # 导入函数库 import jqdata import pandas as pd def initialize(context): set_benchmark('00 ...

  10. JDBC-通用查询

    手动实现查询结果返回为一个对象集合 实体类 package com.jdbc; public class User { private Integer id; private String name; ...