java中的泛型是什么_Java中泛型是什么?Java泛型的详细介绍
本篇文章给大家带来的内容是关于Java中泛型是什么?Java泛型的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
一、什么是泛型?
Java泛型设计原则:只要在编译时期没有出现警告,那么运行时期就不会出现ClassCastException异常.
泛型:把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型
参数化类型:
ArrayList中的E称为类型参数变量
ArrayList中的Integer称为实际类型参数
整个称为ArrayList泛型类型
整个ArrayList称为参数化的类型ParameterizedType
二、为什么需要泛型
有了泛型以后:代码更加简洁【不用强制转换】
程序更加健壮【只要编译时期没有警告,那么运行时期就不会出现ClassCastException异常】
可读性和稳定性【在编写集合的时候,就限定了类型】
在创建集合的时候,我们明确了集合的类型了,所以我们可以使用增强for来遍历集合!//创建集合对象
ArrayList list = new ArrayList<>();
list.add("hello");
list.add("world");
list.add("java");
//遍历,由于明确了类型.我们可以增强for
for (String s : list) {
System.out.println(s);
}
三、泛型基础
泛型类就是把泛型定义在类上,用户使用该类的时候,才把类型明确下来….这样的话,用户明确了什么类型,该类就代表着什么类型…用户在使用的时候就不用担心强转的问题,运行时转换异常的问题了。
在类上定义的泛型,在类的方法中也可以使用!/*
1:把泛型定义在类上
2:类型变量定义在类上,方法中也可以使用
*/
public class ObjectTool {
private T obj;
public T getObj() {
return obj;
}
public void setObj(T obj) {
this.obj = obj;
}
}
用户想要使用哪种类型,就在创建的时候指定类型。使用的时候,该类就会自动转换成用户想要使用的类型了。
public static void main(String[] args) {//创建对象并指定元素类型
ObjectTool tool = new ObjectTool<>();
tool.setObj(new String("钟福成"));
String s = tool.getObj();
System.out.println(s);
//创建对象并指定元素类型
ObjectTool objectTool = new ObjectTool<>();
/**
* 如果我在这个对象里传入的是String类型的,它在编译时期就通过不了了.
*/
objectTool.setObj(10);
int i = objectTool.getObj();
System.out.println(i);
}
定义泛型方法….泛型是先定义后使用的//定义泛型方法..
public void show(T t) {
System.out.println(t);
}
用户传递进来的是什么类型,返回值就是什么类型了public static void main(String[] args) {
//创建对象
ObjectTool tool = new ObjectTool();
//调用方法,传入的参数是什么类型,返回值就是什么类型
tool.show("hello");
tool.show(12);
tool.show(12.5);
}
子类明确泛型类的类型参数变量/*
把泛型定义在接口上
*/
public interface Inter {
public abstract void show(T t);
}
实现泛型接口的类…../**
* 子类明确泛型类的类型参数变量:
*/
public class InterImpl implements Inter {
@Override
public void show(String s) {
System.out.println(s);
}
}
四、泛型的应用
当我们写网页的时候,常常会有多个DAO,我们要写每次都要写好几个DAO,这样会有点麻烦。public abstract class BaseDao {
//模拟hibernate....
private Session session;
private Class clazz;
//哪个子类调的这个方法,得到的class就是子类处理的类型(非常重要)
public BaseDao(){
Class clazz = this.getClass(); //拿到的是子类
ParameterizedType pt = (ParameterizedType) clazz.getGenericSuperclass(); //BaseDao
clazz = (Class) pt.getActualTypeArguments()[0];
System.out.println(clazz);
}
public void add(T t){
session.save(t);
}
public T find(String id){
return (T) session.get(clazz, id);
}
public void update(T t){
session.update(t);
}
public void delete(String id){
T t = (T) session.get(clazz, id);
session.delete(t);
}
}
继承抽象DAO,该实现类就有对应的增删改查的方法了。public class CategoryDao extends BaseDao {
}
BookDao
public class BookDao extends BaseDao {
}
java中的泛型是什么_Java中泛型是什么?Java泛型的详细介绍相关推荐
- java dao 泛型的好处_java中泛型有什么作用
泛型的作用如下: 1.类型安全 泛型的主要目标是提高 Java 程序的类型安全.编译时的强类型检查:通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设.没有泛型,这些假设 ...
- java中map如何实现遍历_Java中如何遍历Map对象的4种方法
在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...
- java的对象是什么意思_Java中对象和对象引用的区别,引用、指向是什么意思
Java的变量分为两大类:基本数据类型和引用数据类型. 其中基本类型变量有四类8种:byte short int long float double char boolean,除了8种基本数据类型变量 ...
- java字符串转json取集合_Java中Json字符串直接转换为对象的方法(包括多层List集合)...
使用到的类:net.sf.json.JSONObject 使用JSON时,除了要导入JSON网站上面下载的json-lib-2.2-jdk15.jar包之外,还必须有其它几个依赖包:commons-b ...
- java native方法体在哪_java中native方法的使用
native關鍵字說明其修飾的方法是一個原生態方法,方法對應的實現不是在當前文件,而是在用其他語言(如C和C++)實現的文件中.Java語言本身不能對操作系統底層進行訪問和操作,但是可以通過JNI接口 ...
- Java中非法参数的异常_Java中的异常
异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的众多子类描述各种不同的异常. ...
- JAVA中的异常的触发_java中的异常
在日常的程序开发中难免会出现遗漏并且就算代码没有问题可是由于程序运行环境的内存不够了,磁盘满了,网络连接问题等这些非正常的情况在java中都称之为异常.在java中对异常的处理有统一的异常处理机制,今 ...
- java主键后四位顺序号_JAVA中取顺序号 (转)
JAVA中取顺序号 (转)[@more@] 在写系统的时候,经常会遇到用一个唯一的键值去票识一个对象,如数据库中一条记录的主键,文件的文件名 等.常用的做法将这个键值从1,2,3--这样一值递加下去, ...
- java中的case1怎么说_Java 中的 CAS 简述及原理解析
一.CAS 是什么? CAS(Compare And Swap),比较并交换,它是一条CPU并发原语.它的功能是判断内存某个位置的值是否为预期值,如果是则更新为新的值,这个过程是原子的.1 publi ...
最新文章
- 为特定用户创建监牢 chroot
- python好学吗mooc中文网-Python学习第一课-MOOC嵩天
- 点击php文件显示下载文件,求助 为什么编的下载文件代码,打开后下的全是php文件...
- [flutter专题]详解AppBar小部件
- js获取checkbox复选框获取选中的选项
- 如何获取filecoin_Filecoin如何获取更大的出块机会?
- 算法题+JVM+自定义View,终局之战
- 对硬盘做镜像,按位与按文件有什么区别?
- java程序退出自动保存_你知道如何自动保存 Spring Boot 应用进程号吗
- fseek函数与ftell函数使用例程
- 牛客网初阶练习(6)
- 冰点还原精灵如何关闭?
- 如何在Android上查看本地空气质量指数
- 中国富人的身影:世界最大楼市泡沫在加拿大
- 【BZOJ1502】【NOI2005】月下柠檬树
- 数字图像处理 第五章图像复原与重建
- 关系代数之专门的关系运算(选择、投影)
- IE8-下背景色半透明滤镜在jquery动画中失效问题记录
- 均衡的轻薄性能旗舰 — Razer Blade15 长测
- Python基础教程——1.5Python的输入输出
热门文章
- Gartner发布云产品评估报告:阿里云计算能力全球第一 1
- 超详细的MySQL工作原理 体系结构
- SAAS 架构模式下的多租户系统设计
- VMWare学习总结(3)——Vmware Workstation 14虚拟机网卡桥接连不上网络解决方法
- Java基础学习总结(141)——Cron 表达式使用再总结
- SQLite学习总结(3)——SQLite命令及语法
- Docker学习总结(26)——Docker 管理工具的选择:Kubernetes 还是 Swarm?
- bk3432开发的应用实例_SpringCloud应用在Kubernetes上的最佳实践—诊断(线上联调)...
- 透视转换oracle,使用Oracle的行列转化函数实现ASH的数据透视功能
- Spring(10)——bean作用范围(二)—自定义scope