第08章 泛型

  1 /*****************
  2 ***第08章 泛型
  3 *******知识点:
  4 **************1.泛型定义
  5 **************2.泛型使用
  6 ******************2.1 普通泛型
  7 ******************2.2 类型通配符
  8 ******************2.3 受限泛型
  9 ******************2.4 泛型接口、类、方法
 10 ******************2.5 泛型数组
 11 ******************2.6 嵌套设置
 12 */
 13 import java.util.*;
 14
 15 class Point<T>{       // 此处可以随便写标识符号,T是type的简称
 16     private T var ; // var的类型由T指定,即:由外部指定
 17     public T getVar(){  // 返回值的类型由外部决定
 18         return var ;
 19     }
 20     public void setVar(T var){  // 设置的类型也由外部决定
 21         this.var = var ;
 22     }
 23     public Point(T t){
 24         this.var = t;
 25     }
 26     public Point(){
 27
 28     }
 29 }
 30
 31 class PointKeyValue<K,V>{  // 此处指定了两个泛型类型
 32     private K key;    // 此变量的类型由外部决定
 33     private V value;  // 此变量的类型由外部决定
 34     public void setKey(K key){
 35         this.key = key;
 36     }
 37     public void setValue(V value){
 38         this.value = value;
 39     }
 40     public K getKey(){
 41         return key;
 42     }
 43     public V getValue(){
 44         return value;
 45     }
 46
 47     public String toString(){
 48         return "{" + key + "," + value + "}";
 49     }
 50     public PointKeyValue(K k ,V v){
 51         this.key = k;
 52         this.value = v;
 53     }
 54     public PointKeyValue(){
 55
 56     }
 57
 58 }
 59
 60 class PointInner<T,K,V>{
 61     private PointKeyValue p_PointKeyValue; // 接收两个泛型类型成员变量
 62     private Point p_Point;
 63     public PointInner(T t,K k,V v){
 64         this.p_Point = new Point(t);
 65         this.p_PointKeyValue = new PointKeyValue(k,v);
 66     }
 67
 68     public String toString(){
 69         return "{" + p_Point.getVar() + ":" + p_PointKeyValue.getKey() + "," + p_PointKeyValue.getValue() + "}";
 70     }
 71 }
 72
 73 public class test8{
 74     public static void main(String[] args){
 75         showDemo("泛型定义");
 76         testGenericsDefined();//演示泛型定义
 77
 78         showDemo("泛型使用");
 79         testGenericsUse();//演示泛型使用
 80     }
 81
 82     /*
 83     *1.泛型定义
 84     */
 85     public static void testGenericsDefined(){
 86         /*List l_Gen = new ArrayList();
 87         l_Gen.add(1);
 88         l_Gen.add(2);
 89         l_Gen.add("aaaaa");//注意跟之前两个元素类型发生了变化,但不报错
 90         System.out.println("集合中元素有:"  + l_Gen);
 91
 92         List<Integer> l_Gen1 = new ArrayList<Integer>();
 93         l_Gen1.add(1);
 94         l_Gen1.add(2);
 95         l_Gen1.add("aaaaa");//此行报错
 96         System.out.println("集合中元素有:"  + l_Gen1);*/
 97
 98         //泛型:Java的参数化类型,即允许我们在创建集合时指定集合中元素的类型,且该集合只能存储指定类型的元素
 99         //使用范围:定义类、接口、方法是使用类型形参
100         //需注意:静态初始化块中是不允许的
101
102     }
103
104     /*
105     *2.泛型使用
106     */
107     public static void testGenericsUse(){
108         /**2.1 普通泛型**/
109         System.out.println("演示2.1 普通泛型===========");
110         Point<Integer> p_Generics = new Point<Integer>(); //里面的var类型为Integer
111         p_Generics.setVar(new Integer(1));//设置var
112         System.out.println("返回int值:" + (p_Generics.getVar().intValue()));//返回var
113
114         PointKeyValue<Integer,String> p_KeyValue = new PointKeyValue<Integer,String>();
115         p_KeyValue.setKey(new Integer(10));
116         p_KeyValue.setValue("Ciade");
117         System.out.println("返回key:" + p_KeyValue.getKey());
118         System.out.println("返回value:" + p_KeyValue.getValue());
119         System.out.println("返回p_KeyValue:" + p_KeyValue.toString());
120
121         /**2.2 类型通配符**/
122         System.out.println("演示2.2 类型通配符===========");
123         PointKeyValue<Integer,Double> p_PointKeyValue2 = new PointKeyValue<Integer,Double>();
124         PointKeyValue<String,String> p_PointKeyValue3 = new PointKeyValue<String,String>();
125
126         p_PointKeyValue2.setKey(new Integer(2));
127         p_PointKeyValue2.setValue(new Double(2.2));
128
129         p_PointKeyValue3.setKey("3");
130         p_PointKeyValue3.setValue("33333333");//注意区分p_PointKeyValue2和p_PointKeyValue3
131
132         demoWildcardFun(p_PointKeyValue2);//调用通配符泛型演示方法
133         demoWildcardFun(p_PointKeyValue3);//调用通配符泛型演示方法
134
135         /**2.3 受限泛型**/
136         System.out.println("演示2.3 受限泛型===========");
137         PointKeyValue<Integer,String> p_PointKeyValue4 = new PointKeyValue<Integer,String>();
138
139         p_PointKeyValue4.setKey(new Integer(4));
140         p_PointKeyValue4.setValue("4444444");
141
142         //demoLimitedFun(p_PointKeyValue2);//这行报错  类型受限
143         //demoLimitedFun(p_PointKeyValue3);//这行报错  类型受限
144         demoLimitedFun(p_PointKeyValue4);
145
146         /**2.4 泛型接口、类、方法**/
147         //接口、类 、方法 参照上面的Point类和PointKeyValue类的定义使用
148         //温馨提示  当重载方法时,若重载的参数个数相同,参数类型和返回值不同时 可以使用泛型方法
149
150         /**2.5 泛型数组**/
151         //Java 不支持泛型数组。也就是说
152         //List<String>[] ls = new ArrayList<String>[10];  //编译报错
153         //而你可以这样子
154         //List<String>[] ls = new ArrayList[10];
155         //不过不建议使用
156
157         /**2.6 嵌套设置**/
158         System.out.println("演示2.6 嵌套设置===========");
159         PointInner<Integer,Integer,String> p_PointInner = new PointInner<Integer,Integer,String>
160                                                         (new Integer(7),new Integer(7),"777777777");
161         System.out.println("PointInner对象:" + p_PointInner);
162
163     }
164
165     /*
166     *  通配符泛型演示方法
167     */
168     public static void demoWildcardFun(PointKeyValue<?,?> temp){  // 可以接收任意的泛型对象 其中?为通配符
169         System.out.print("返回key:" + temp.getKey());
170         System.out.print("_返回value:" + temp.getValue());
171         System.out.println("_返回PointKeyValue对象:" + temp.toString());
172
173     }
174
175     /*
176     * 受限泛型演示方法
177     */
178     //第一个参数只能接收Number及其Number的子类,第二个参数只能接收String或Object类型的泛型
179     public static void demoLimitedFun(PointKeyValue<? extends Number,? super String> temp){
180         demoWildcardFun(temp);
181     }
182
183
184     /*
185     *    抽取打印演示函数  用于打印演示功能提示
186     */
187     public static void showDemo(String demoStr){
188         System.out.println("演示:" + demoStr);
189     }
190 }
时间: 2024-08-28 03:07:24

第08章 泛型的相关文章

C++ Primer 读书笔记:第11章 泛型算法

第11章 泛型算法 1.概述 泛型算法依赖于迭代器,而不是依赖容器,需要指定作用的区间,即[开始,结束),表示的区间,如上所示 此外还需要元素是可比的,如果元素本身是不可比的,那么可以自己定义比较函数. 2.常用的泛型算法函数: fill,fill_n, copy, replace, sort, unique, count_if, stable_sort 此外在有一个谓词函数会结合以上的函数使用,像sort, count_if等 3.再谈迭代器 (1)插入迭代器 back_inserter, f

第5章 泛型

5.1 泛型概述 在拆箱时,需要使用类型强制转换运算符. 泛型的名称用字母T作为前缀. 5.2 创建泛型类 public class LinkedList<T> : IEnumerable<T> { public IEnumerator<T> GetEnumerator() { } } 5.3 泛型的功能1  通过default关键字,将null赋予引用类型,将0赋予值类型. T doc = default(T); return doc; 2 约束 public cla

第十一章 泛型算法 C++ PRIMER

vector<int>::const_iterator result = find(vector.begin(). vector.end(),search_value); 如果查找失败,分会end()  如果有两个,会返回哪一个的迭代器? int *reauslt = find(ia,ia+6,search_value); 也可以同样处理字符串 算法要以<algorithm><numeric>,依赖于迭代器和迭代器的算法实现,算法可能改变值,可能移动元素,单从不直接添加

C++ Primer学习总结 第10章 泛型算法

第10章 泛型算法 1.    find()泛型算法使用示例: 2.    只读算法accumulate:对所给范围的元素求和并返回. 注意accumulate的第3个参数决定着它的返回类型. 即如果第3个参数是double,就算迭代器里都是int,最终还是返回double类型的数. 3.    只读算法equal:比较前两个迭代器表示范围的所有元素是否与第3个迭代器表示的对应位置的元素都相同,如果相同返回true.两个容器类型可以不同,保存的元素类型也可以不同,只要元素之间可以比较即可.如st

JavaScript权威指南第08章 函数

函数 在javascript中,函数是对象,所以可以给函数设置属性,可以调用他们的方法. 8.1函数定义 function 函数名(参数列表){ 语句内容 } 函数命名规则 1.字母之间用下划线 like_this() 2.非首字母的单词首字母大写 likeThis() 嵌套函数 在函数里面定义函数 8.2函数调用 函数调用的4种方法 1.函数 2.方法 3.构造方法 4.apply call 简介调用 8.3函数的实参和形参 8.4作为值的函数 8.5作为命名空间的函数 8.6闭包 8.7函数

第08章 二叉树

二叉树 1.为什么要使用二叉树? 二叉树结合了有序数组快速查找和线性链表快速插入删除的优势. 树是一种既能像有序数组一样实现快速查询,又能像链表一样实现快速地插入和删除的数据结构. 2.有关树的几个术语 路径:从一个节点走到另一个节点,过程中数据的排列叫做路径. 根:一个树只有一个根,只有子节点,没有父节点. 父节点:每个节点都向上连接的节点叫做父节点,根没有父节点,一个子节点只有一个父节点. 子节点:每个节点都向下连接的一个或者多个节点叫做子节点. 子树:每个节点都可以作为子树的根,子节点的节

《JAVA编程思想》学习笔记——第十五章 泛型

在面相对象编程中,多态算是一种泛化机制. 泛型实现了参数化类型的概念. 泛型的主要目的之一就是用来指定容器要持有什么类型的对象,而且由编译器来保证类型的正确性. 元组 仅一次方法调用就能返回多个对象,你应该经常需要这样的功能吧.可是return语句只允许返回单个对象.因此,解决方法就是创建一个对象,用它来持有想要返回的多个对象.例: public class TwoTuple<A,B> {} public class ThreeTuple<A,B,C> extents TwoTup

第08章 对象和包

本章重点:1.对象以及对象的成员2.访问控制符3.重载和包4.Java的注释 对象有3个主要特征:行为.状态.标识符. public class newClass{ void print(){ System.out.println("我是一名优秀的程序员"); } public static void main(String[] args){ newClass nc = new newClass(); nc.print(); }} 成员方法实际上就是函数,而函数拥有自己的特性,在定义方

第二十一章 泛型(generic)

(1)引言 泛型:是指参数化类型的能力. 例如:有这样一个类:这是一个比较简单并且是很常用的带有泛型的方法. package com.lidd.generic; public class GenericTestSecond { public <T>void one(T t){ } } 下面是几个类,分别是一般类.抽象类.接口(接口也是特殊的类). package com.lidd.generic; public class A { } package com.lidd.generic; pub