Java 泛型高级
1、限制泛型可用类型
在定义泛型类别时,预设可以使用任何的类型来实例化泛型中的类型,但是如果想要限制使用泛型的类别时,只能用某个特定类型或者其子类型才能实例化该类型时,使用extends关键字指定这个类型必须是继承某个类,或者实现某个接口。
如下Code
public class ListGenericFlag<T extends List> {
	private T[] flagArray;
	public T[] getFlagArray() {
		return flagArray;
	}
	public void setFlagArray(T[] flagArray) {
		this.flagArray = flagArray;
	}
}
测试:
public static void main(String[] args) {
		ListGenericFlag<LinkedList> flag1 = new ListGenericFlag<LinkedList>();
		ListGenericFlag<ArrayList> flag2 = new ListGenericFlag<ArrayList>();
		LinkedList[] likedList = new LinkedList[10];
		flag1.setFlagArray(likedList);
		ArrayList[] arrayLists = new ArrayList[10];
		flag2.setFlagArray(arrayLists);
	}
如果出入的是HashMap,就会显示出错

2、当没有指定泛型继承的类型或接口时,默认使用T extends Object,所有默认情况下任何类型都可以作为参数传入。
如下图Code,可以增加任何对象。

3、现在有这样一个需求,需要实现如下
flag = new GenericFlag<ArrayList>()
flag = new GenericFlag<LinkedList()
简单的说,实例化类型持有者时,它必须是实现List的类别或其子类别,要定义这样一个名词,可以使用“?”通配子元,并使用“extends”关键字限定类型持有者的型态。
实现的Code如下
public class GenericTest<T> {
	private T flag;
	public T getFlag() {
		return flag;
	}
	public void setFlag(T flag) {
		this.flag = flag;
	}
	public static void main(String[] args) {
		//固定语法
		GenericTest<? extends List>  g1 = null;
		g1 = new GenericTest<ArrayList>();
		g1 = new GenericTest<LinkedList>();
	}
}
super为list上面的(用的较少)
GenericTest<? super List> g2 = null;
g2 = new GenericTest<Object>();
4、泛型的继承
定义了Parent类,里面有泛型T1和T2
public class Parent<T1,T2> {
	private T1 flag;
	private T2 flag2;
	public T1 getFlag() {
		return flag;
	}
	public void setFlag(T1 flag) {
		this.flag = flag;
	}
	public T2 getFlag2() {
		return flag2;
	}
	public void setFlag2(T2 flag2) {
		this.flag2 = flag2;
	}
}
定义了Child类,定义了T3。同时可以访问父类的T1和T2
public class Child<T1,T2,T3> extends Parent<T1, T2> {
	private T3 flag3;
	public T3 getFlag3() {
		return flag3;
	}
	public void setFlag3(T3 flag3) {
		this.flag3 = flag3;
	}
}
5、泛型接口的继承
定义一个泛型接口
public interface IParent<T1,T2> {
	public void setFlag1(T1 flag1);
	public void setFlag2(T2 flag2);
	public T1 getFlag1();
	public T2 getFlag2();
}
定义泛型接口的实现类
public class ChildClass<T1,T2> implements IParent<T1, T2> {
	private T1 flag1;
	private T2 flag2;
	public void setFlag1(T1 flag1) {
		this.flag1 = flag1;
	}
	public void setFlag2(T2 flag2) {
		this.flag2 = flag2;
	}
	public T1 getFlag1() {
		return flag1;
	}
	public T2 getFlag2() {
		return flag2;
	}
}
Java 泛型高级的更多相关文章
- java 16-8 泛型高级之通配符
		
泛型高级(通配符) ?:任意类型,如果没有明确,那么就是Object以及任意的Java类了 ? extends E:向下限定,E及其子类 ? super E:向上限定,E极其父类 import jav ...
 - Android(java)学习笔记92:泛型高级之通配符
		
package cn.itcast_07; import java.util.ArrayList; import java.util.Collection; /* * 泛型高级(通配符) * ?:任意 ...
 - Android(java)学习笔记31:泛型高级之通配符
		
1. 泛型高级之通配符: package cn.itcast_07; import java.util.ArrayList; import java.util.Collection; /* * 泛型高 ...
 - Java入门 - 高级教程 - 03.泛型
		
原文地址:http://www.work100.net/training/java-generic.html 更多教程:光束云 - 免费课程 泛型 序号 文内章节 视频 1 概述 2 泛型方法 3 泛 ...
 - 使用java泛型设计通用方法
		
泛型是Java SE 1.5的新特性, 泛型的本质是参数化类型, 也就是说所操作的数据类型被指定为一个参数. 因此我们可以利用泛型和反射来设计一些通用方法. 现在有2张表, 一张user表和一张stu ...
 - 大白话说Java泛型(二):深入理解通配符
		
文章首发于[博客园-陈树义],点击跳转到原文<大白话说Java泛型(二):深入理解通配符> 上篇文章<大白话说Java泛型(一):入门.原理.使用>,我们讲了泛型的产生缘由以及 ...
 - java泛型总结(类型擦除、伪泛型、陷阱)
		
JDK1.5开始实现了对泛型的支持,但是java对泛型支持的底层实现采用的是类型擦除的方式,这是一种伪泛型.这种实现方式虽然可用但有其缺陷. <Thinking in Java>的作者 B ...
 - 大白话说Java泛型:入门、使用、原理
		
文章首发于[博客园-陈树义],点击跳转到原文<大白话说Java泛型:入门.使用.原理> 远在 JDK 1.4 版本的时候,那时候是没有泛型的概念的.当时 Java 程序员们写集合类的代码都 ...
 - Java泛型的应用
		
一.泛型类 package generics; /** * 泛型类,格式:public class 类名<泛型类型1, ...> * @author zhongfg * @date 201 ...
 
随机推荐
- Spark运行原理【史上最详细】
			
https://blog.csdn.net/lovechendongxing/article/details/81746988 Spark应用程序以进程集合为单位在分布式集群上运行,通过driver程 ...
 - SpringBoot AOP概念及使用Demo
			
AOP核心概念1.横切关注点 对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点2.切面(aspect)->(通知+切点) 类是对物体特征的抽象,切面就是对横切关注点的抽象.通知+切 ...
 - Scrum会议博客以及测试报告
			
3组Alpha冲刺阶段博客目录 一.Scrum Meeting1. 第六周会议记录(链接地址:https://www.cnblogs.com/Cherrison-Time/articles/11788 ...
 - 实用mysql数据库命令
			
连接:mysql -h主机地址 -u用户名 -p用户密码 (注:u与root可以不用加空格,其它也一样)断开:exit (回车) 创建授权:grant select on 数据库.* to 用户名@登 ...
 - Servlet的入门
			
什么是Servlet? Servlet是运行在服务端的java小程序,是sun公司提供的一套规范,用来处理客户端请求.响应给浏览器的动态资源.Servlet是JavaWeb三大组件之一(Setvlet ...
 - nodejs保存图片至本地
			
const request = require("request"); const fs = require("fs"); for(let i = 1; i & ...
 - 创建型模式(三) 抽象工厂模式(Abstract Factory)
			
一.动机(Motivation) 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作:同时,由于需求的变化,往往存在更多系列对象的创建工作. 如何应对这种变化?如何绕过常规的对象创建方法(ne ...
 - maven项目重构-使用了mybatis generator插件
			
1.在worksapce下,dos窗口输入spring init -g=com.briup.apps -a=poll3 -d=mysql,mybatis,web poll3 2.下载依赖,cd到pol ...
 - Eclipse下,Maven+JRebel安装破解手记
			
Java开发中,Maven已经是标配,使用JRebel能大大地提高工作效率,特别是在Web开发中,不用重启tomcat,大大地提高了工作效率. 1.前提条件 安装JDK 8 安装eclipse, ec ...
 - Redis-3.2.1集群内网部署
			
摘要: Redis-3.2.1集群内网部署 http://rubygems.org国内连不上时的一种Redis集群部署解决方案.不足之处,请广大网友指正,谢谢! 一. 关于redis cluster ...