java的泛型回顾
来源:互联网 发布:c语言选择结构编程题 编辑:程序博客网 时间:2024/05/22 00:39
前言
这边博文例子是自己测试并整理的,有点凌乱,但是耐心看下去还是能对泛型略知一二的。具体详细的泛型介绍有一篇写的很好的博客:
——————此处传送门——————
几个常见的符号
遇到一些泛型的代码,经常见到这几个符号,一开始学的时候也是糊里糊涂。
- E:Element,表示集合中的元素
- T:Type(Java类)
- K:key(键)
- V:value(值)
- N:number(数值类型)
- ?:表示不确定的数值类型
小例子
package genericity;import java.util.ArrayList;import java.util.Collection;import java.util.LinkedList;import java.util.List;public class TestGenericity { private String s = "this is string..."; public static void main(String[] args) { //测试 One<? extends List> one = new One<ArrayList>();//正确 /* * class Two<T extends Collection<? extends List>> * */ //Two<List> two = new Two<List>();报错 Two<Collection<List>> two = new Two<Collection<List>>();//正确 Two<List<ArrayList<String>>> two2 = new Two<List<ArrayList<String>>>();//正确 Two<LinkedList<ArrayList<String>>> two3 = new Two<LinkedList<ArrayList<String>>>();//正确// Two<LinkedList<Collection>> two4 = new Two<LinkedList<Collection>>();//报错,超过上限 /** * class Three<T extends Collection<? super ArrayList>> * */ Three<List<ArrayList>> t1 = new Three<List<ArrayList>>();//正确 Three<ArrayList<ArrayList>> t2 = new Three<ArrayList<ArrayList>>();//正确 Three<ArrayList<List>> t3 = new Three<ArrayList<List>>();//正确 //因为超过了下线ArrayList,所以会报错// Three<ArrayList<SonOfArrayList<String>>> t4 = new Three<ArrayList<SonOfArrayList<String>>>();//正确 /* * 测试T和Class<T>区别: * 1. T:表示具体的对象 * 2. Class<T>:表示该T对象的类型,如果T是String则返回 * 的是Class.newInstence就是String类型的 * */ System.out.println("1:"+String.class);//class java.lang.String System.out.println("2:"+String.class.getName());//java.lang.String System.out.println("3:"+one.getType(String.class));//java.lang.Class String str = new String("asd");// System.out.println(str);//会报错,把Class<T>改为T后正确 String str2 = one.getType(str.getClass()); System.out.println("4:"+str2.toString());//java.lang.Class try { //得到实例str2.getClass().newInstance();获得一个String类型的对象 //5:java.lang.String System.out.println("5:"+str2.getClass().newInstance().getClass().getName()); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); }// str2=123;//报错 System.out.println("6:"+str2.getClass().getName());//java.lang.String }}/* * 此处的 T 为类型实参,表示T类型是Collection的子类 * */class One<T extends Collection>{ /* 泛型方法示例 * @param <T extends Object>:指明T的类型 * @param T:返回值的类型 * @param Class<T>:表示泛型T的具体类型 * @param c:用来创建T代表的类的对象 * */ protected <T extends Object> T getType(Class<T> clazz){ return (T) clazz.getClass().getName(); }}/* ?表示有限制的通配符,表示不确定的类型 * extends:确定泛型的上限 * */class Two<T extends Collection<? extends List>>{}/* * super确定了泛型的下限 * */class Three<T extends Collection<? super ArrayList>>{}//ArrayList的子类class SonOfArrayList<E> extends ArrayList<E>{}
0 0
- java的泛型回顾
- Java final的回顾
- Java基础知识的回顾
- 关于java的知识回顾
- java多线程的回顾(一)
- 关于java多线程的回顾
- 回顾java堆栈的区别
- java的基础知识回顾---1
- java的基础知识回顾---2
- java基础类的回顾
- Java 回顾笔记_集合框架-泛型基本应用
- Java 回顾笔记_集合框架-泛型高级应用
- 泛型回顾
- Java回顾
- java回顾
- java回顾
- JAVA回顾
- 回顾java
- 微信开发之TortoiseSVN
- 扬帆起航
- 根据《RabbitMQ实战--高效部署分布式消息队列》这本书来具体总结下
- React核心内容归纳总结
- gradle-wrapper.properties中各属性的含义
- java的泛型回顾
- Android-拍照
- 使用json-server搭建模拟api接口
- 原生js写点击事件改变字体颜色
- Linux常用命令的中文解释
- POJ 3020 Antenna Placement (最小路径覆盖)
- Incorrect string value:"\ \ \ \ \"for column'trurname' at row 1
- 第四届蓝桥杯B组java--错误票据
- centos7 x64 texstudio在线安装