详解Java常用工具类—泛型

一、泛型概述

1、背景

在Java中增加泛型之前,泛型程序设计使用继承来实现的。
坏处:

需要进行强制类型转换
可向集合中添加任意类型的对象,存在风险

2、泛型的使用

List<String> list=new ArrayList<String>();

3、多态与泛型

class Animal{}
class Cat extends Animal{}
List<Animal> list=new ArrayList<Cat>(); //这是不允许的,变量声明的类型必须匹配传递给实际对象的类型。

其它错误的例子:

List<Object> list=new ArrayList<String>();
List<Number> number=new ArrayList<Integer>();

4、泛型内容

  1. 泛型作为方法参数
  2. 自定义泛型类
  3. 自定义泛型方法

 二、泛型作为方法参数

泛型作为参数时,如果参数为多个子类,可以使用(List<? extends 父类> xxx)。这种情况下,在调用方法时,就可以传递父类及其子类作为参数了。
还有一个:(List<? super 类> xxx)。这种情况下是指类及其超类(父类)。

三、自定义泛型

public class NumGeneric<T> {
	private T num;

	public NumGeneric() {

	}

	public NumGeneric(T num) {
		this.setNum(num);
	}

	public T getNum() {
		return num;
	}

	public void setNum(T num) {
		this.num = num;
	}

	//测试
	public static void main(String[] args) {
		NumGeneric<Integer> intNum = new NumGeneric<>();
		intNum.setNum(10);
		System.out.println("Integer:" + intNum.getNum());

		NumGeneric<Float> floatNum = new NumGeneric<>();
		floatNum.setNum(5.0f);
		System.out.println("Float:" + floatNum.getNum());
	}
}

泛型类的定义和使用,可以传进不同类的对象作为参数

四、自定义泛型方法

public <T extends Number> void printValue(T t) {
	System.out.println(t);
}

注意:

  1. 泛型方法不一定在泛型类里面
  2. <T>必须写在修饰符和返回值类型之间。

 五、泛型总结

1、为什么使用泛型

不用进行强制类型转换,避免运行时异常的安全隐患

2、变量声明的类型必须匹配传递给实际对象的类型。

3、泛型作为方法参数

public void sellGoods(List<? extends Goods> goods)

表示可以是Goods及Goods类的子类作为泛型的参数类型,extends后面除了跟类的名字,还可以跟接口的名字。

4、public void sellGoods(List<? super Goods> goods)

表示可以是Goods类以及其超类作为泛型的参数类型

5、自定义泛型类

6、自定义泛型方法

以上所述是小编给大家介绍的Java常用工具类—泛型详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • 详谈Java中的Object、T(泛型)、?区别

    因为最近重新看了泛型,又看了些反射,导致我对Object.T(以下代指泛型).?产生了疑惑. 我们先来试着理解一下Object类,学习Java的应该都知道Object是所有类的父类,注意:那么这就意味着它的范围非常广!首先记住这点,如果你的参数类型时Object,那么的参数类型将非常广! <Thinking in Java>中说很多原因促成了泛型的出现,最引人注目的一个原因就是为了创造容器类.这个要怎么来理解呢?我的理解是,可以抛开这个为了创造容器类这个,而是回到泛型的目的是限定某种类型上来.

  • Java 中利用泛型和反射机制抽象DAO的实例

    Java 中利用泛型和反射机制抽象DAO的实例 一般的DAO都有CRUD操作,在每个实体DAO接口中重复定义这些方法,不如提供一个通用的DAO接口,具体的实体DAO可以扩展这个通用DAO以提供特殊的操作,从而将DAO抽象到另一层次,令代码质量有很好的提升 1.通用接口 import java.io.Serializable; import java.util.List; public interface BaseDao<T> { T get(Serializable id); List<

  • 实例分析Java泛型

    泛型:即"参数化类型",所操作的数据类型被指定为一个参数.该机制允许程序员在编译时检测到非法的类型. 不使用泛型与使用泛型的区别 不使用泛型代码: import java.util.ArrayList; import java.util.List; public class NoGenerics { public static void main(String[] args){ List arrayList=new ArrayList(); arrayList.add("1&

  • java基础之反射和泛型以及注解

     java基础之反射和泛型以及注解 泛型擦除 泛型擦除: 泛型只在编译时期有效,编译后的字节码文件中不存在泛型信息. 声明泛型集合,集合两端类型必须一致.类型也可以用包装类型,泛型的类型必须是引用类型,不能为基本类型. 实现公用的类和方法,对公用的业务进行抽取. 泛型方法/泛型类/泛型接口 public class GenericTest { /** * 泛型声明,定义泛型方法 * @param <T> * @param <K> * @param t * @param k */ p

  • Java 获取泛型的类型实例详解

    Java 获取泛型的类型实例详解 Java 泛型实际上有很多缺陷,比如不能直接获取泛型的类型,不能获取带泛型类等. 以下方式是不正确的: ①.获取带泛型的类的类型 Class lstUClazz = List<User>.class ②获取局部变量泛型的类型 List<User> listUser = new ArrayList<User>(); Type genType = listUser.getClass().getClass().getGenericSuperc

  • 详谈Java泛型中T和问号(通配符)的区别

    类型本来有:简单类型和复杂类型,引入泛型后把复杂类型分的更细了. 概述 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Java语言引入泛型的好处是安全简单. 在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的"任意化","任意化"带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对

  • 详解java 中泛型中的类型擦除和桥方法

    在Java中,泛型的引入是为了在编译时提供强类型检查和支持泛型编程.为了实现泛型,Java编译器应用类型擦除实现: 1.  用类型参数(type parameters)的限定(如果没有就用Object)替换泛型类型中的所有类型参数. 2.  需要保持类型安全的时候插入类型转换(隐含插入) 3.  在extened 泛型类型中生成桥方法来保证多态性 类型擦除确保不会为已参数化了的类型(paramterized types)产生新类,这样泛型能保证没有运行时的负载. 泛型类型擦除 在类型擦除过程中,

  • 重新理解Java泛型

    这篇文章的目的在于介绍Java泛型,使大家对Java泛型的各个方面有一个最终的,清晰的,准确的理解,同时也为下一篇<重新理解Java反射>打下基础. 简介 泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用.本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理,以及让人苦恼的类型擦除. 泛型基础 泛型类 我们首先定义一个简单的Box类: public class Box { private String object; public void set(St

  • 详解Java常用工具类—泛型

    一.泛型概述 1.背景 在Java中增加泛型之前,泛型程序设计使用继承来实现的. 坏处: 需要进行强制类型转换 可向集合中添加任意类型的对象,存在风险 2.泛型的使用 List<String> list=new ArrayList<String>(); 3.多态与泛型 class Animal{} class Cat extends Animal{} List<Animal> list=new ArrayList<Cat>(); //这是不允许的,变量声明的

  • 详解javascript常用工具类的封装

    前言 因为工作中经常用到这些方法,所有便把这些方法进行了总结. JavaScript 1. type 类型判断 isString (o) { //是否字符串 return Object.prototype.toString.call(o).slice(8, -1) === 'String' } isNumber (o) { //是否数字 return Object.prototype.toString.call(o).slice(8, -1) === 'Number' } isObj (o) {

  • 详解Java中String类的各种用法

    目录 一.创建字符串 二.字符.字节与字符串的转换 1.字符与字符串的转换 2.字节与字符串的转换 三.字符串的比较 1.字符串常量池 2.字符串内容比较 四.字符串查找 五.字符串替换 六.字符串拆分 七.字符串截取 八.String类中其它的常用方法 九.StringBuffer 和 StringBuilder 1.StringBuilder与StringBuffer的区别 2.StringBuilder与StringBuffer常用的方法 十.对字符串引用的理解 一.创建字符串 创建字符串

  • 详解Java中Optional类的使用方法

    目录 一.Optional类的来源 二.Optional类是什么 三.Optional类用法 四.代码示例 1.创建Optional类 2.判断Optional容器中是否包含对象 3.获取Optional容器的对象 4.过滤 5.映射 五.什么场景用Optional 1.场景一 2.场景二 3.场景三 4.场景四 一.Optional类的来源 到目前为止,臭名昭著的空指针异常是导致Java应用程序失败的最常见原因.以前,为了解决空指针异常,Google公司著名的Guava项目引入了Optiona

  • java常用工具类 数字工具类

    本文实例为大家分享了java常用工具类,数字工具类的具体代码,供大家参考,具体内容如下 package com.jarvis.base.util; import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.Random; public class NumericHelper { /** * 描述:通过一个整数i获取你所要的哪几个(从0开始

  • java常用工具类 XML工具类、数据验证工具类

    本文实例为大家分享了java常用工具类的具体代码,供大家参考,具体内容如下 package com.jarvis.base.util; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import java.net.URL; import java.util.Properties

  • java常用工具类 IP、File文件工具类

    本文实例为大家分享了java常用工具类的具体实现代码,供大家参考,具体内容如下 IP工具类 package com.jarvis.base.util; import java.io.IOException; import java.io.InputStreamReader; import java.io.LineNumberReader; /** * * * @Title: IpMacUtil.java * @Package com.jarvis.base.util * @Description

  • Java常用工具类 Random随机数、MD5加密工具类

    本文实例为大家分享了java常用工具类的具体代码,供大家参考,具体内容如下 Random随机数工具类 package com.jarvis.base.util; import java.util.Random; /** * * * @Title: RandomHelper.java * @Package com.jarvis.base.util * @Description: 随机数工具类 * @version V1.0 */ public class RandomHelper { /** *

  • Java常用工具类 UUID、Map工具类

    本文实例为大家分享了Java常用工具类 的具体代码,供大家参考,具体内容如下 UUID工具类 package com.jarvis.base.util; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; /** * A class that represents an immutable universally

  • java常用工具类 Reflect反射工具类、String字符串工具类

    本文实例为大家分享了java常用工具类的具体代码,供大家参考,具体内容如下 Reflect反射工具类 package com.jarvis.base.util; /** * * * @Title: ReflectHelper.java * @Package com.jarvis.base.util * @Description: 反射工具类 * @version V1.0 */ public class ReflectHelper { /** * 提指定的类载入以系统中 * * @param n

随机推荐