Java泛型的应用

一、泛型类

 1 package generics;
 2 /**
 3  * 泛型类,格式:public class 类名<泛型类型1, ...>
 4  * @author zhongfg
 5  * @date 2015-06-16
 6  * @param <T>
 7  */
 8 class Student<T> {
 9
10     private T num;
11
12     public T getNum() {
13         return num;
14     }
15
16     public void setNum(T num) {
17         this.num = num;
18     }
19
20 }
21
22 public class GenericsClass {
23     public static void main(String[] args) {
24
25         Student<String> s1 = new Student<String>();
26         s1.setNum("001");
27         String num1 = s1.getNum();
28         System.out.println(num1);
29
30         System.out.println("----------------");
31
32         Student<Integer> s2 = new Student<Integer>();
33         s2.setNum(2);
34         int num2 = s2.getNum();
35         System.out.println(num2);
36     }
37 }

二、泛型方法

 1 package generics;
 2 /**
 3  * 泛型方法,public <泛型类型> 返回值  方法名(泛型类型)
 4  * @author zhongfg
 5  * @date 2015-06-16
 6  */
 7 class Actor {
 8
 9     public <T> void show(T t){
10
11         System.out.println(t);
12     }
13
14 }
15
16 public class GenericsMethod {
17
18     public static void main(String[] args) {
19
20         Actor a = new Actor();
21         a.show("Angelababy");
22         a.show(26);
23     }
24 }

三、泛型接口

 1 package generics;
 2 /**
 3  * 泛型类,格式:public interface 接口名<泛型类型1, ...>
 4  * @author zhongfg
 5  * @date 2015-06-16
 6  * @param <T>
 7  */
 8 interface Person<T> {
 9
10     public abstract void show(T t);
11 }
12
13 class PersonImpl<T> implements Person<T> {
14
15     @Override
16     public void show(T t) {
17         // TODO Auto-generated method stub
18         System.out.println(t);
19     }
20 }
21
22 public class GenericsInterface {
23     public static void main(String[] args) {
24
25         Person<String> p1 = new PersonImpl<String>();
26         p1.show("黄晓明");
27
28         Person<Integer> p2 = new PersonImpl<Integer>();
29         p2.show(38);
30     }
31 }

四、泛型高级之通配符

 1 package generics;
 2
 3 import java.util.ArrayList;
 4 import java.util.Collection;
 5
 6 /**
 7  * 泛型高级(通配符)
 8  * ?:任意类型,如果没有明确指定,那么就是Object或者任意的Java类了
 9  * ? extends E:向下限定,E及其子类
10  * ? super E:向上限定,E及其父类
11  * @author zhongfg
12  * @date 2015-06-16
13  */
14 class Animal {
15
16 }
17
18 class Dog extends Animal {
19
20 }
21
22 class Cat extends Animal {
23
24 }
25
26 public class GenericsWildcard {
27     public static void main(String[] args) {
28
29         //明确指明泛型的时候,前后必须一致
30         Collection<Object> c1 = new ArrayList<Object>();
31 //        Collection<Object> c2 = new ArrayList<Animal>(); 报错,前后类型不一致
32 //        Collection<Object> c3 = new ArrayList<Dog>(); 同上
33 //        Collection<Object> c4 = new ArrayList<Cat>(); 同上
34
35         //?表示任意类型都是可以的
36         Collection<?> c5 = new ArrayList<Object>();
37         Collection<?> c6 = new ArrayList<Animal>();
38         Collection<?> c7 = new ArrayList<Dog>();
39         Collection<?> c8 = new ArrayList<Cat>();
40
41         //? extends E:向下限定,E及其子类
42 //        Collection<? extends Animal> c9 = new ArrayList<Object>(); 报错,Object不是Animal子类
43         Collection<? extends Animal> c10 = new ArrayList<Animal>();
44         Collection<? extends Animal> c11 = new ArrayList<Dog>();
45         Collection<? extends Animal> c12 = new ArrayList<Cat>();
46
47         //? super E:向上限定,E及其父类
48         Collection<? super Animal> c13 = new ArrayList<Object>();
49         Collection<? super Animal> c14 = new ArrayList<Animal>();
50 //        Collection<? super Animal> c15 = new ArrayList<Dog>(); 报错,Dog不是Animal及其以上的类型
51 //        Collection<? super Animal> c16 = new ArrayList<Cat>(); 同上
52     }
53 }
时间: 2024-08-07 21:20:11

Java泛型的应用的相关文章

Java泛型中的PECS原则

今天在写代码的时候使用到了这样一个方法签名: public void foo(Map<String, String> map); 在写这个参数的时候正好在想一些关于泛型的东西,于是: public void foo(Map<? extends String, ? extends String> map); 这两种写法有什么区别呢?记得以前和同学讨论过这个问题,但后来没有记下来,渐渐又淡忘了.今天又去翻了好多资料,总算找到一些可以参考的,赶紧记在这里方便以后温故知新啦.好了,言归正传

Java泛型的协变

在上篇<Java泛型的基本使用>这篇文章中遗留下面问题,即将子类型也能加入到父类型的泛型中.要实现这样的功能必须借助于协变. 实验准备 如今在上篇文章展示的Decorator类型的基础上,添加一些代码,如代码清单1所看到的. 代码清单1 /** * * 描 述:Exp2使用br/> * 作 者:jiaan.gja<br/> * 历 史: (版本号) 作者 时间 凝视 <br/> * @param itemList */ public void doDecorate

2017.4.5 Java 泛型

Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型. 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数. 假定我们有这样一个需求:写一个排序方法,能够对整形数组.字符串数组甚至其他任何类型的数组进行排序,该如何实现? 答案是可以使用 Java 泛型. 使用 Java 泛型的概念,我们可以写一个泛型方法来对一个对象数组排序.然后,调用该泛型方法来对整型数组.浮点数数组.字符串数组等进行排

关于Java泛型的使用

在目前我遇到的java项目中,泛型应用的最多的就属集合了.当要从数据库取出多个对象或者说是多条记录时,往往都要使用集合,那么为什么这么使用,或者使用时有什么要注意的地方,请关注以下内容. 感谢Windstep. 原文链接:http://www.cnblogs.com/lwbqqyumidi/p/3837629.html 原文标题:Java总结篇系列:Java泛型 (我的第一篇水文,233)

java 泛型 窜讲

一.为什么使用泛型      复用性:泛型的本质就是参数化类型,因而使用编写的泛型代码可以被许多不同类型的对象所复用.      安全性:在对类型Object引用的参数操作时,往往需要进行显式的强制类型转换.这种强制类型转换需要在运行时才能被发现是否转换异常,通过引入泛型能将在运行时才能检查类型转换,提前到编译时期就能检查. 二.自定义泛型 java中自定义泛型分为三种:泛型类.泛型接口.泛型方法. 下面使用一个案例演示泛型类.泛型方法,泛型接口类似,所以不再演示. // 自定义泛型类publi

1月21日 - (转)Java 泛型

java泛型 什么是泛型? 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样. 可以在集合框架(Collection framework)中看到泛型的动机.例如,Map 类允许您向一个 Map 添加任意类的对象,即使最常见的情况是在给定映射(map)中保存某个特定类型(比如 String)的对象. 因为 M

Java泛型_上界extends_下界super

?Java泛型_上界extends_下界super ? 通配符类型 <? extends T> 表示类型的上界,表示参数化类型的可能是T或是T的子类 <? super T> 表示类型下界(Java Core中叫超类型限定),表示参数化类型是此类型(T)的超类型(父类型),直至Object 当使用 Upper Bound 通配符时 如下代码, /**  * 代码中通配符<?> 是 <? extends Object> 的简写  *  * @param list

C++泛型 &amp;&amp; Java泛型实现机制

C++泛型 C++泛型跟虚函数的运行时多态机制不同,泛型支持的静态多态,当类型信息可得的时候,利用编译期多态能够获得最大的效率和灵活性.当具体的类型信息不可得,就必须诉诸运行期多态了,即虚函数支持的动态多态. 对于C++泛型,每个实际类型都已被指明的泛型都会有独立的编码产生,也就是说list<int>和list<string>生成的是不同的代码,编译程序会在此时确保类型安全性.由于知道对象确切的类型,所以编译器进行代码生成的时候就不用运用RTTI,这使得泛型效率跟手动编码一样高.

java 泛型详解(普通泛型、 通配符、 泛型接口,泛型数组,泛型方法,泛型嵌套)

JDK1.5 令我们期待很久,可是当他发布的时候却更换版本号为5.0.这说明Java已经有大幅度的变化.本文将讲解JDK5.0支持的新功能-----Java的泛型. 1.Java泛型  其实Java的泛型就是创建一个用类型作为参数的类.就象我们写类的方法一样,方法是这样的method(String str1,String str2 ),方法中参数str1.str2的值是可变的.而泛型也是一样的,这样写class Java_Generics<K,V>,这里边的K和V就象方法中的参数str1和st

java泛型的讲解

java泛型 什么是泛型? 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样. 可以在集合框架(Collection framework)中看到泛型的动机.例如,Map 类允许您向一个 Map 添加任意类的对象,即使最常见的情况是在给定映射(map)中保存某个特定类型(比如 String)的对象. 因为 M