一、泛型类

 package generics;
/**
* 泛型类,格式:public class 类名<泛型类型1, ...>
* @author zhongfg
* @date 2015-06-16
* @param <T>
*/
class Student<T> { private T num; public T getNum() {
return num;
} public void setNum(T num) {
this.num = num;
} } public class GenericsClass {
public static void main(String[] args) { Student<String> s1 = new Student<String>();
s1.setNum("001");
String num1 = s1.getNum();
System.out.println(num1); System.out.println("----------------"); Student<Integer> s2 = new Student<Integer>();
s2.setNum(2);
int num2 = s2.getNum();
System.out.println(num2);
}
}

二、泛型方法

 package generics;
/**
* 泛型方法,public <泛型类型> 返回值 方法名(泛型类型)
* @author zhongfg
* @date 2015-06-16
*/
class Actor { public <T> void show(T t){ System.out.println(t);
} } public class GenericsMethod { public static void main(String[] args) { Actor a = new Actor();
a.show("Angelababy");
a.show(26);
}
}

三、泛型接口

 package generics;
/**
* 泛型类,格式:public interface 接口名<泛型类型1, ...>
* @author zhongfg
* @date 2015-06-16
* @param <T>
*/
interface Person<T> { public abstract void show(T t);
} class PersonImpl<T> implements Person<T> { @Override
public void show(T t) {
// TODO Auto-generated method stub
System.out.println(t);
}
} public class GenericsInterface {
public static void main(String[] args) { Person<String> p1 = new PersonImpl<String>();
p1.show("黄晓明"); Person<Integer> p2 = new PersonImpl<Integer>();
p2.show(38);
}
}

四、泛型高级之通配符

 package generics;

 import java.util.ArrayList;
import java.util.Collection; /**
* 泛型高级(通配符)
* ?:任意类型,如果没有明确指定,那么就是Object或者任意的Java类了
* ? extends E:向下限定,E及其子类
* ? super E:向上限定,E及其父类
* @author zhongfg
* @date 2015-06-16
*/
class Animal { } class Dog extends Animal { } class Cat extends Animal { } public class GenericsWildcard {
public static void main(String[] args) { //明确指明泛型的时候,前后必须一致
Collection<Object> c1 = new ArrayList<Object>();
// Collection<Object> c2 = new ArrayList<Animal>(); 报错,前后类型不一致
// Collection<Object> c3 = new ArrayList<Dog>(); 同上
// Collection<Object> c4 = new ArrayList<Cat>(); 同上 //?表示任意类型都是可以的
Collection<?> c5 = new ArrayList<Object>();
Collection<?> c6 = new ArrayList<Animal>();
Collection<?> c7 = new ArrayList<Dog>();
Collection<?> c8 = new ArrayList<Cat>(); //? extends E:向下限定,E及其子类
// Collection<? extends Animal> c9 = new ArrayList<Object>(); 报错,Object不是Animal子类
Collection<? extends Animal> c10 = new ArrayList<Animal>();
Collection<? extends Animal> c11 = new ArrayList<Dog>();
Collection<? extends Animal> c12 = new ArrayList<Cat>(); //? super E:向上限定,E及其父类
Collection<? super Animal> c13 = new ArrayList<Object>();
Collection<? super Animal> c14 = new ArrayList<Animal>();
// Collection<? super Animal> c15 = new ArrayList<Dog>(); 报错,Dog不是Animal及其以上的类型
// Collection<? super Animal> c16 = new ArrayList<Cat>(); 同上
}
}

Java泛型的应用的更多相关文章

  1. Java泛型的历史

    为什么Java泛型会有当前的缺陷? 之前的章节里已经说明了Java泛型擦除会导致的问题,C++和C#的泛型都是在运行时存在的,难道Java天然不支持“真正的泛型”吗? 事实上,在Java1.5在200 ...

  2. 浅析Java 泛型

    泛型是JavaSE5引入的一个新概念,但是这个概念在编程语言中却是很普遍的一个概念.下面,根据以下内容,我们总结下在Java中使用泛型. 泛型使用的意义 什么是泛型 泛型类 泛型方法 泛型接口 泛型擦 ...

  3. Java:泛型基础

    泛型 引入泛型 传统编写的限制: 在Java中一般的类和方法,只能使用具体的类型,要么是基本数据类型,要么是自定义类型.如果要编写可以应用于多种类型的代码,这种刻板的限制就会束缚很多! 解决这种限制的 ...

  4. java泛型基础

    泛型是Java SE 1.5的新特性, 泛型的本质是参数化类型, 也就是说所操作的数据类型被指定为一个参数. 这种参数类型可以用在类.接口和方法的创建中, 分别称为泛型类.泛型接口.泛型方法.  Ja ...

  5. 使用java泛型设计通用方法

    泛型是Java SE 1.5的新特性, 泛型的本质是参数化类型, 也就是说所操作的数据类型被指定为一个参数. 因此我们可以利用泛型和反射来设计一些通用方法. 现在有2张表, 一张user表和一张stu ...

  6. 关于Java泛型的使用

    在目前我遇到的java项目中,泛型应用的最多的就属集合了.当要从数据库取出多个对象或者说是多条记录时,往往都要使用集合,那么为什么这么使用,或者使用时有什么要注意的地方,请关注以下内容. 感谢Wind ...

  7. 初识java泛型

    1 协变数组类型(covariant array type) 数组的协变性: if A IS-A B then A[] IS-A B[] 也就是说,java中的数组兼容,一个类型的数组兼容他的子类类型 ...

  8. 【Java心得总结四】Java泛型下——万恶的擦除

    一.万恶的擦除 我在自己总结的[Java心得总结三]Java泛型上——初识泛型这篇博文中提到了Java中对泛型擦除的问题,考虑下面代码: import java.util.*; public clas ...

  9. 【Java心得总结三】Java泛型上——初识泛型

    一.函数参数与泛型比较 泛型(generics),从字面的意思理解就是泛化的类型,即参数化类型.泛型的作用是什么,这里与函数参数做一个比较: 无参数的函数: public int[] newIntAr ...

  10. 初识Java泛型以及桥接方法

    泛型的由来 在编写程序时,可能会有这样的需求:容器类,比如java中常见的list等.为了使容器可以保存多种类型的数据,需要编写多种容器类,每一个容器类中规定好了可以操作的数据类型.此时可能会有Int ...

随机推荐

  1. JAVA常见算法题(二十三)

    package com.xiaowu.demo; /** * 给一个不多于5位的正整数,要求:①求它是几位数:②逆序打印出各位数字. * * * @author WQ * */ public clas ...

  2. hdu4099 Revenge of Fibonacci

    题意:给定fibonacci数列,输入前缀,求出下标.题目中fibonacci数量达到100000,而题目输入的前缀顶多为40位数字,这说明我们只需要精确计算fibinacci数前40位即可.查询时使 ...

  3. ES6中的模板字符串---反引号``

    在react中,反引号``有特殊的含义. 如MDN中所述,模板字符串(Template literals)允许嵌入表达式,并且支持多行字符串和字符串插补特性.基本语法为以下几种: 其中第一行为最基本用 ...

  4. GLSL实现Glow效果 【转】

    http://blog.csdn.net/a3070173/article/details/3220940 Glow即辉光效果现在已成为3D图形中一个引人注目的特效.本文主要介绍如何使用GLSL实现一 ...

  5. Sublime Text 3 文档

    中文版:http://feliving.github.io/Sublime-Text-3-Documentation/ 英文版:http://www.sublimetext.com/docs/3/

  6. PS如何使用自定义画笔

    1 没有杂色的白背景不用抠图,GIF格式的透明背景不用抠图,有背景但是不想抠图都可以直接定义为画笔.先选中需要定义的画笔(得到选区),然后单击编辑-定义画笔预设.   2 随后就可以找到我们的画笔工具 ...

  7. Unix环境部署

    http://www.cnblogs.com/chuyuhuashi/p/4423699.html 分布式javahttp://www.cnblogs.com/tangyanbo/p/4499485. ...

  8. Spring Web Flow 入门demo(三)嵌套流程与业务结合 附源代码

    上篇博客我们说Spring web Flow与业务结合的方式主要有三种,以下我们主要介绍一下第三种的应用方式 3,运行到<action-state> 元素 SpringWeb Flow 中 ...

  9. MySQL 查询 数据库有多少表 表名是哪些

    1.查询sjcenter数据库里开头为sj_demo和sj_onlyinv的所有表的总条数 select sum(table_rows) from (select table_name,table_r ...

  10. parcel 入门

    https://www.gitbook.com/book/dragon8github/fuck-parcel/details