`
冯瑞芳
  • 浏览: 27398 次
  • 性别: Icon_minigender_2
  • 来自: 河南
文章分类
社区版块
存档分类
最新评论

泛型总结

 
阅读更多

JDK5以前,对象保存到集合中就会失去其特性,取出时通常要程序员手工进行类型的强制转换,这样不可避免就会引发程序的一些安全性问题。例如

ArrayList list = new ArrayList();

list.add("abc");

Integer num = (Integer) list.get(0);  //运行时会出错,但编码时发现不了

list.add(new Random());

list.add(new ArrayList());

for(int i=0;i<list.size();i++){

}

以上代码运行时会出错

泛形的基本术语,以ArrayList<E>为例:<>念着typeof

ArrayList<E>中的E称为类型参数变量

ArrayList<Integer>中的Integer称为实际类型参数

整个称为ArrayList<E>泛型类型

整个ArrayList<Integer>称为参数化的类型

Java程序中的普通方法、构造方法和静态方法中都可以使用泛型。方法使用泛形前,必须对泛形进行声明,语法:<T> T可以是任意字母,但通常必须要大写。<T>通常需放在方法的返回值声明之前。例如:

public static <T> void doxx(T t);

package cn.csdn.generic;

import java.util.List;

public class Demo02 {

//定义 泛型  在方法上定义

public <T> void test1(T l){  //应用的对象

}

public  static <T> void test2(T l){  //应用的对象

}

public <T> int test3(T l){  //应用的对象

return 0;

}

public <T> List<T> test4(){

return null;

}

}

具体实例如下:

public class Demo01 {

@Test

public void test1() {

List<String> list = new ArrayList<String>();//泛型

list.add("adc");

list.add("def");

list.add("cde");

Iterator<String> it = list.iterator();

while (it.hasNext()) {

String value = it.next();

System.out.println(value);

}

for(String value:list){

System.out.println(value);

}

}

@Test

public void test2() {

Map<Integer, String> map = new HashMap<Integer, String>();

map.put(1, "redarmy");

map.put(2, "mj");

map.put(3, "xiaoshenyang");

Set<Map.Entry<Integer, String>> entries = map.entrySet();

for (Map.Entry<Integer, String> entry : entries) {

System.out.println(entry.getKey());

System.out.println(entry.getValue());

}

}

@Test

public void test3() {

Map<Integer, String> map = new HashMap<Integer, String>();

map.put(1, "redarmy");

map.put(2, "mj");

map.put(3, "xiaoshenyang");

Set<Integer> keys = map.keySet();

Iterator<Integer> it = keys.iterator();

while (it.hasNext()) {

int key = it.next();

System.out.println(key + "  " + map.get(key));

}

for(Integer key : keys){

System.out.println(key + "  " + map.get(key));

}

}

@Test

public void test4(){

// List<String> list = new ArrayList<Object>();//此种用法是错误的

// List<Object> list1 = new ArrayList<String>();//此种用法是错误的

}

}

注意:

1、只有对象类型才能作为泛型方法的实际参数。

在泛型中可以同时有多个类型,例如:

public static <K,V> V getValue(K key) { return map.get(key);}

2、使用泛形时,泛形类型须为引用类型,不能是基本数据类型

3在类上声明的泛型不能够用在static修饰的方法上

public  static <T> void test(T l){  //应用的对象

}

<!--EndFragment-->
分享到:
评论

相关推荐

    个人学习C#泛型总结ppt

    学了一年多的C#,现在学到泛型了,它是对原System.collection集合类的一个加强,主要是对其性能加以提升.下面是我学习泛型总结的ppt,愿与大家分享.

    17.2.5 泛型总结.mp4

    17.2.5 泛型总结.mp4

    C#泛型总结

    C#泛型总结

    Java中泛型总结(推荐)

    主要介绍了Java中泛型总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    java泛型总结.docx

    泛型类型:定义泛型类型时,使用尖括号,并在尖括号中指定类型参数。例如,List表示一个字符串类型的列表。 泛型方法:定义泛型方法时,在方法名后面使用尖括号,并在尖括号中指定类型参数。例如,public static &lt;T&gt;...

    java-泛型总结【从入门到项目总结】

    关于java泛型的总结: 从入门介绍到项目使用的实际经验归纳总结得出! 从jdk5到jdk8!

    很好的Java泛型的总结

    很好的Java泛型的总结,看完之后你一定会知道java泛型的底层机制,你一定会学会Java泛型!

    Java泛型总结(2)进阶篇

    NULL 博文链接:https://fantaxy025025.iteye.com/blog/2213815

    java泛型总结

    深入理解java泛型,包括类名泛型的定义,方法泛型定义,泛型的返回

    JAVA泛型总结

    java 泛型详解 实例 class Point class Notepad,V&gt;{ // 此处指定了...通配符、受限泛型、泛型无法向上转型、泛型接口、泛型方法、通过泛型方法返回泛型类型实例、使用泛型统一传入的参数类型、泛型数组、泛型的嵌套设置

    全面总结Java泛型

    • 全面总结Ja• 全面总结Java泛型v• 全面总结Ja• 全面总结Java泛型va泛型a泛型• 全面• 全面总结Java泛型• 全面总结Java泛型总结Java泛• • 全面总结Java泛型全面总结Java泛型型• • 全面总结Java泛型全面...

    思维导图之Java泛型详解

    思维导图之Java泛型详解

    Java 泛型总结(二):泛型与数组

    数组与泛型的关系还是有点复杂的,Java 中不允许直接创建泛型数组。本文分析了其中原因并且总结了一些创建泛型数组的方式。具有很好的参考价值。下面跟着小编一起来看下吧

    Java 泛型总结及详解

    主要介绍了Java 泛型的相关资料,并附简单实例代码,需要的朋友可以参考下

    Java 泛型总结(一):基本用法与类型擦除

    本文主要介绍了Java泛型的使用以及类型擦除相关的问题。具有很好的参考价值。下面跟着小编一起来看下吧

    Java 泛型总结(三):通配符的使用

    在泛型的使用中,还有个重要的东西叫通配符,本文介绍通配符的使用。具有很好的参考价值。下面跟着小编一起来看下吧

    集合框架以及泛型的相关应用

    集合框架以及泛型总结

    泛型知识总结

    主要关于泛型应用、原理、协变逆变、泛型缓存等相关方面的知识需要的可以下载学习

    全面总结Java泛型--实例

    全面总结Java泛型--实例

    VC++ 2005:泛型编程

    C++/CLI泛型编程概览 CLI泛型介绍 CLI泛型适用对象 CLI泛型约束 CLI泛型与C++模板 讲座总结 Q&A

Global site tag (gtag.js) - Google Analytics