一、泛型类

 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. mybatis-mysql小优化

    原文:http://blog.csdn.net/jinzhencs/article/details/51656548 1.查询某条记录是否存在 <!-- 查询s是否被创建过:Uuid,name, ...

  2. 在eclipse上部署openfire 3.9.1源码,並配置openfire

    参考文章:https://my.oschina.net/u/1409622/blog/205603 在网上找了很久部署openfire源码的文章,由于我使用的是最新的3.9.1源码,试了很多种部署方法 ...

  3. 【ASP.NET】 中 system.math 函数使用

    1 /* 字段 */ 2 Math.E; //2.71828182845905 3 Math.PI; //3.14159265358979 4 5 /* 静态方法 */ 6 Math.Abs; //绝 ...

  4. linux就该这么学之新手必须掌握的linux命令

    常用的系统工作命令 1echo:用于在终端显示字符串或变量 格式为:“echo [字符串|变量]” 2date:用于显示/设置系统的时间或日期 格式为:“data[选项][+指定格式]” 3rebot ...

  5. Java反射学习总结五(Annotation(注解)-基础篇)

    Annotation(注解)简单介绍: 注解大家印象最深刻的可能就是JUnit做单元測试,和各种框架里的使用了. 本文主要简介一下注解的用法,下篇文章再深入的研究. annotation并不直接影响代 ...

  6. LINQ获取两个List的交集

    1.调用: UserList = UserList.ToList().Intersect(userIDList, new MyUserComparer()).AsQueryable(); 2.须要重写 ...

  7. Linux zip

    压缩文件: zip -r res.zip [src/] [abc.txt] 解压文件: unzip res.zip -d dir_path

  8. div 事件透传

    有些时候,我们会想要把一个 div 层覆盖在另一个 div 层上,要让下层的 div 响应鼠标事件而上层的不响应仅仅只做内容展示. 这种时候,我们就可以用到一个 CSS 属性:pointer-even ...

  9. EffectiveJava(8)覆盖equals是要遵守的约定

    覆盖equals是要遵守的约定 1.覆盖种类: -类的每个1实例本质上都是唯一的 -不关心类是否提供了"逻辑相等"的测试功能(Random测试是否能随机相同数字) -超类已经覆盖了 ...

  10. IOS 开发环境,证书和授权文件是什么?

    一.成员介绍 1.    Certification(证书) 证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种: 1)    Developer Certification(开发证书) 安装 ...