浅谈Java中的泛型
泛型是Java自JDK5开始支持的新特性,主要用来保证类型安全。另外泛型也让代码含义更加明确清晰,增加了代码的可读性。
- 泛型的声明和使用
在类声明时在类名后面声明泛型,比如MyList<T>,其中T就是泛型,相当于一个类型变量,表示MyList类期望操作的类型。
public class MyList<T> {
public void add(T t) {
}
}
当定义MyList变量、创建MyList对象、声明MyList子类时就可以为泛型T指定具体类型
public static void main(String[] args) {
MyList<String> myList = new MyList<String>();
myList.add("只能传入字符串");
}
其实泛型在Java集合框架中使用的非常广泛,集合类的绝大部分操作都使用了泛型,由于泛型是JDK5时出现的,为了兼容旧版本,以下写法也能编译通过,至于是否有泛型效果则取决于变量是否有泛型
List<Integer> list = new ArrayList<Integer>(); //标准写法
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList();
List list3 = new ArrayList<Integer>(); //无泛型效果
List list4 = new ArrayList(); //无泛型效果
- 泛型类型察除
Java语言对泛型的实现有些蹩脚,虽然泛型变量的名称和子类继承父类时为泛型指定的具体类型可以通过反射拿到,但声明变量和创建对象时的泛型信息却被擦除了。
获得泛型变量的名称:T
public class MyList<T> {
public void getType() {
TypeVariable[] type = MyList.class.getTypeParameters();
System.out.println(type[0]);//T
}
}
获得子类继承父类时为泛型指定的具体类型(这点对编写通用类特别重要):
public class MyList<T> {
public void getType() {
ParameterizedType type = (ParameterizedType) getClass().getGenericSuperclass();
Class tClass = (Class) type.getActualTypeArguments()[0];
System.out.println(tClass);//class java.lang.String
}
}
public class MyChild extends MyList<String> {
public static void main(String[] args) {
MyChild child = new MyChild();
child.getType();
}
}
浅谈Java中的泛型的更多相关文章
- 浅谈Java中的equals和==(转)
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...
- 浅谈Java中的对象和引用
浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...
- 浅谈Java中的equals和==
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = ...
- 浅谈Java中的深拷贝和浅拷贝(转载)
浅谈Java中的深拷贝和浅拷贝(转载) 原文链接: http://blog.csdn.net/tounaobun/article/details/8491392 假如说你想复制一个简单变量.很简单: ...
- 浅谈Java中的深拷贝和浅拷贝
转载: 浅谈Java中的深拷贝和浅拷贝 假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(bool ...
- 【转】浅谈Java中的hashcode方法(这个demo可以多看看)
浅谈Java中的hashcode方法 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native i ...
- 浅谈Java中的final关键字
浅谈Java中的final关键字 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来 ...
- 【转】浅谈Java中的hashcode方法
哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native int hashCode(); 根据这个 ...
- 浅谈Java中的栈和堆
人们常说堆栈堆栈,堆和栈是内存中两处不一样的地方,什么样的数据存在栈,又是什么样的数据存在堆中? 这里浅谈Java中的栈和堆 首先,将结论写在前面,后面再用例子加以验证. Java的栈中存储以下类型数 ...
随机推荐
- POJ 1006:Biorhythms 中国剩余定理
Biorhythms Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 121194 Accepted: 38157 Des ...
- JS添加、设置属性以及鼠标移入移出事件
源代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...
- Java8集合框架——HashMap源码分析
java.util.HashMap 本文目录: 一.HashMap 的特点概述和说明 二.HashMap 的内部实现:从内部属性和构造函数说起 三.HashMap 的 put 操作 四.HashMap ...
- EOJ Monthly 2020.1 E. 数的变幻
题目链接:https://acm.ecnu.edu.cn/contest/247/problem/E/ 这道题是cf原题: Codeforces Round #608 (Div. 2) E. Comm ...
- JavaScript 之 Function
JavaScript function 语句定义和用法: function 语句用于声明一个函数. 函数声明后,我们可以在需要的时候调用. 在 JavaScript 中,函数是对象,函数也有属性和方法 ...
- .net core excel导入导出
做的上一个项目用的是vs2013,传统的 Mvc模式开发的,excel报表的导入导出都是那几段代码,已经习惯了. 导入:string filename = ExcelFileUpload.FileNa ...
- TCP三次握手和四次挥手相关
客户端A 服务端BSYN (建立连接位标识 1为建立联机) ACK (确认位标识 1为确认) seq (一个随机顺序码) ack(一个确认号码,通常为seq+1) 三次握手:1.A 发起建立 连接 的 ...
- UML-设计模式-本地服务容错-适配器+工厂模式
问题1:我们的ProductCatalog存储在了数据库里了,但是数据库瘫掉了,怎么办? 解决:本地(Map)---->Local(文件)---->DB 问题2:如果新加了存储Produc ...
- UML-快速的更新分析
1.目标 本章主要介绍需求和领域分析中的一些变更. 迭代1阶段:结束时,举行为期1-2天的简短的需求讨论会,内容是调查和详细编写更多需求+解决初始阶段反馈问题. 迭代2阶段:结束时,举行为期1-2天的 ...
- Lyft、Uber、滴滴涉足汽车租赁领域,能打破既有汽车所有权模式吗?
自共享经济出现之后,众多相关项目遍地开花.这些共享经济项目对于人们来说,最直观的感受就是实惠.性价比高.方便.不过抛开这些使用层面的优点来看的话,共享经济项目最大的特色或许就是改变了事物的所有权.一件 ...