泛型理解
来源:互联网 发布:小程序cms系统 编辑:程序博客网 时间:2024/06/07 14:39
泛型:本质是实现参数化类型,就是所操作的数据类型被指定为一个参数。
使用:类型<标记符> 其中类型<标记符>是类型的泛型类型,标记符称为类型变量或类型参数,类型称为原始类型。
例
Vertor<E> Vertor<E>是Vertor的泛型类型 E称为类型变量或类型参数 Vertor称为原始类型
标记符意义
E - Element (多在集合中使用,因为集合中存放的是元素)
T -Type(Java类)代表某一类型
K - Key(键)
V -Value(值)
N -Number(数值类型)
? - 表示不确定的java类型
特性
1.参数化类型与原始类型的兼容性
参数化类型对象可以被赋值为原始类型的对象
原始类型对象也可以被赋值为参数化类型对象
2.参数化类型无继承性
对于同一原始类型的两个属于继承关系的泛型类型声明的对象不能赋值。
Vector<String> vector=new Vector(””);
Vector<Object> v1=v;//这是错误的。
3.泛型的”去类型”特性
去类型就是指泛型中的类型只是提供给编译器使用,当程序编译成功后就会去掉“类型“信息,即编译成功后就没有泛型类型的限制了。
通过反射机制我们可以在某一泛型类集合,添加非本泛型集合类型变量的对象。泛型
例:
public classShow {
privatestatic ArrayList<Integer> list;
publicstatic void main(String[] args) {
list=newArrayList<>();
list.add(0);
try{
list.getClass().getMethod("add",Object.class).invoke(list, "abc");
}catch (IllegalAccessException | IllegalArgumentException
|InvocationTargetException | NoSuchMethodException
|SecurityException e) {
e.printStackTrace();
}
for(int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
结果
0
abc
使用时遇到的问题:
http://www.cnblogs.com/MOBIN/p/4773603.html
4.通配符
使类型参数可以任意化,像集合中可以添加任意类型的对象。
实现方式一定义类型参数为Object
实现方式二:定义类型参数为?本方式只有被调用使用的时候才会知道具体类型。本方式不能对添加修改。
方式二例
publicclass ShowTwo {
privatestatic ArrayList<String> list;
privatestatic ArrayList<Integer> intList;
public static void main(String[] args){
list=new ArrayList<>();
list.add("fff");
intList=new ArrayList<>();
intList.add(5);
showData(list);
showData(intList);
}
private static <?>voidshowData(ArrayList<?> list){
// list.add("ff");//这是错误的不可以操作。并不确定是什么类型的。
for (int i = 0; i < list.size();i++) {
System.out.println(list.get(i));
}
}
}
- 泛型的理解
- 【转】理解泛型
- 理解泛型
- 泛型的理解
- C# 理解泛型
- C# 理解泛型
- C# 理解泛型
- 泛型理解
- C# 理解泛型
- 理解泛型
- 泛型初步理解
- Java泛型理解
- 泛型理解
- JAVA泛型理解
- 再次理解泛型
- 泛型理解
- C# 理解泛型
- 泛型简单理解
- 基础算法(三)---二分排序(Java)
- Redis Replication
- 初次尝试使用http-server
- 使用UGUI制作虚拟摇杆
- LeetCode Unique Binary Search Trees
- 泛型理解
- ReactJs学习(环境配置,一个hello world)
- 一位5年的高手总结文
- 网络状态的判断
- Kotlin学习记录(五)—— 条件表达式的使用
- Cygwin安装教程
- Could not find bundle: org.eclipse.equinox.console
- VSCode使用
- 动态代理之cglib