博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Generic泛型
阅读量:5094 次
发布时间:2019-06-13

本文共 3365 字,大约阅读时间需要 11 分钟。

1.问题

未使用泛型时,元素的类型不安全;操作麻烦,可能需要强制转换

1 import java.util.ArrayList; 2 import java.util.List; 3 import org.junit.Test; 4 import day8.Customer; 5  6 public class GenericTest { 7     @Test 8     public void testCollectionGeneric() { 9         List l1=new ArrayList();10         l1.add(new Customer(1,"AA"));11         l1.add(new Customer(3,"CC"));12         l1.add(new Customer(2,"BB"));13               //类型不安全:可以放入任何类型的元素14         l1.add(10);15              //操作麻烦:从集合中取元素时,需要进行类型的强制转换16         Customer c0=(Customer) l1.get(0);17         System.out.println(c0);18 19         }20}

2.引入

1 import java.util.ArrayList; 2 import java.util.List; 3 import org.junit.Test; 4  5 public class GenericTest { 6     @Test 7     public void testCollectionGeneric() { 8  9                 //声明一个Customer类型的List10         List
l2=new ArrayList
();11 l2.add(new Customer(1,"AA"));12 l2.add(new Customer(3,"CC"));13 l2.add(new Customer(2,"BB")); 14 // l2.add(10); 无法放入其他类型的元素15 Customer c1=l2.get(1); //获取元素无需强转16 System.out.println(c1);17 18 }19 }

3.场合

<E,K...>:泛型参数,可以在使用其他类型的场合都可以使用泛型类型;泛型参数可以有多个。

1.声明泛型类

1 public class GenericClass
{ 2 private E i; //变量类型由泛型类决定 3 4 private K j; 5 public E getI() { 6 return i; 7 } 8 public void setI(E i) { //方法的类型和参数也由泛型类决定 9 this.i = i;10 }11 }12 13 public class GenericTest1 {14 public static void main(String args[]){15 GenericClass
gc=new GenericClass
(); //确定泛型类16 gc.setI(123); //参数为int类型17 System.out.println(gc.getI());18 }19 }

2.声明泛型方法

泛型的声明,必须在public,static,final,abstract等之后,返回值声明之前;可以拥有多个泛型参数。

1 public class GenericMethod{ 2     public  
E getI(E i){ 3 return i; 4 } 5 public
E getN(int i){ 6 return null; 7 } 8 public
void display(E i) { 9 System.out.println(e.getClass());10 } 11 }12 public class GenericTest1 {13 public static void main(String args[]){ 14 GenericMethod gm=new GenericMethod();15 gm.getI(1);16 gm.getN(1);17 System.out.println(gm.getI(1));18 System.out.println(gm.getN(1));19 gm.display(1);20 gm.display("1");21 gm.display(12.13);22 }23 }

3.声明泛型集合

确保了元素的类型安全,操作简单

import java.util.HashMap;import java.util.Map;public class GenericTest {    @Test    public void testCollectionGeneric() {         Map
score=new HashMap
(); score.put("1", 90); score.put("2", 80); score.put("3", 70);// score.replace("1", 90, 100); /*Set
keyset=score.keySet(); for(String key : keyset){ Integer value=score.get(key); System.out.println(key+" : "+value); }*/ for(Map.Entry
entry:score.entrySet()){ String key=entry.getKey(); int value=entry.getValue(); int hashcode=entry.hashCode(); System.out.println(hashcode+" -> "+key+" : "+value); }}

转载于:https://www.cnblogs.com/jfl-xx/p/4729458.html

你可能感兴趣的文章
集合和Iterator迭代器
查看>>
IO—》File类
查看>>
Web前端学习笔记(三)——input标签的属性
查看>>
BZOJ.3262.陌上花开([模板]CDQ分治 三维偏序)
查看>>
BZOJ.1312.[Neerc2006]Hard Life(分数规划 最大权闭合子图)
查看>>
js的concat函数、join 、slice函数及二维数组的定义方式
查看>>
Vue的单页应用中如何引用单独的样式文件
查看>>
html5利用getObjectURL获取图片路径上传图片
查看>>
学习资料
查看>>
hread.interrupt()到底意味着什么
查看>>
寒假训练总结
查看>>
equals与==的区别
查看>>
spring 监听器
查看>>
[BZOJ 3709] Bohater
查看>>
Python 的字符编码
查看>>
项目 数据可视化5 随机漫步
查看>>
Visual Studio 2012 更新包2发布,附离线安装方法及下载
查看>>
ThinkPHP带表情无限级评论回复
查看>>
YII2 搭建redis拓展(教程)
查看>>
多继承下的super()指向的不一定是直接父类
查看>>