浅谈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的栈中存储以下类型数 ...
随机推荐
- String 字符串,heredoc,nowdoc
一个字符串可以用 4 种方式表达: 单引号 双引号 heredoc 语法结构 nowdoc 语法结构(自 PHP 5.3.0 起) 单引号 定义一个字符串的最简单的方法是用单引号把它包围起来(字符 ' ...
- Odd sum (对本菜鸡来说是个极坑题)
https://codeforces.com/problemset/problem/797/B time limit per test 1 second memory limit per test 2 ...
- cafe-ssd數據集訓練
训练方式::https://blog.csdn.net/xiao_lxl/article/details/79106837 caffe-ssd训练自己的数据集 https://blog.csdn.ne ...
- struct stat
stat函数用来获取指定路径的文件或者文件夹的信息. //! 需要包含的头文件 #include <sys/types.h> #include <sys/stat.h> //函 ...
- jquery时钟
<script type="text/javascript"> function getDate(){ var mydate = new Date(); //时间对象 ...
- 配置window下python3环境
功能介绍 整理生信小知识库,一些技巧一些知识. 昨天 以下配置环境基于window操作系统,安装python3版本为例,推荐基础版配置. ! METHOD 1 (基础版) 官网下载对应电脑版本的p ...
- 最大子矩阵和(二维矩阵转一维DP)
题目描述 蒜头君拿到了一个矩阵,他想知道其中的最大非空子矩阵和是多少. 输入格式 第一行输入两个整数 n,m代表这个矩阵的行数和列数.接下来n行,每行m个整数 ai1,ai2,ai3⋯aim.(1≤m ...
- 1.where子句的优化
不需要在牺牲可读性的情况下重写sql,因为mysql会自动进行类似的优化. 1.去掉无用的括号 ((a AND b) AND c OR (((a AND b) AND (c AND d)))) -&g ...
- c/c++基础 输入函数/流
....光看算法了没怎么注意输入函数输入流 无论get(char *) gets(char *)/gets_s(char * ,sizeof char*) cin.getline(char* ,siz ...
- 第二季第八天 part2
for (let i = 0; i < 3; i++) { log(i) } log(i) // 结果是 undefined let和const的作用域只在花括号内 let和const不能重复声 ...