静态方法的泛型

    /**
* @description 静态方法的泛型无法使用类定义的泛型,因为类在实例化时才确定具体的泛型类,因此静态方法要使用泛型需要使用泛型方法的方式
*/
public class GenericityTest {
/**
* 泛型方法
*/
public static <T> T getType(T t) {
System.out.println(t.getClass().getName());
return t;
}
}

泛型接口

    interface Super<T>{
void show(T t);
} class Sub<T> implements Super<T>{ @Override
public void show(Object t) {
} }

泛型限定

1.使用?

    /**
* @description 测试泛型限定?
*/
public class Test {
/**
* 泛型限定 --> ? 未知类型
*/
public static void printCollection(Collection<?> coll) {
Iterator<?> it = coll.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
} public static void main(String[] args) {
/**
* 测试泛型限定 ?
*/
ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < 10; ++i) {
list.add(i + "");
}
printCollection(list);
}
}

2.使用? extends E

    /**
* @description 测试泛型限定<? extends E>
*/
public class Test {
public static void main(String[] args) {
/**
* 测试泛型限定 extends
*/
ArrayList<Programmer<String>> programmers = new ArrayList<Programmer<String>>();
for (int i = 0; i < 10; ++i) {
programmers.add(new Programmer<String>(i + ""));
}
printExtendsCollection(programmers); } /**
* 泛型限定 --> ? extends Object 上限限定,未知类型为Object的子类型
*/
public static <T> void printExtendsCollection(Collection<? extends Super<T>> coll) {
Iterator<? extends Super<T>> it = coll.iterator();
while (it.hasNext()) {
Super<T> t = it.next();
t.show();
}
}
} interface Super<T> {
void show();
} class Programmer<T> implements Super<T> {
private T name; Programmer(T name) {
this.name = name;
} public T getName() {
return name;
} @Override
public void show() {
System.out.println(name);
} }

3.使用? super E

    /**
* @description 测试泛型限定<? super E>
*/
public class SuperETest {
public static void main(String[] args) {
/**
* treeSet构造函数原型 <? super E> 说的是比较器可以为E类型的父类型
*/
/*
public TreeSet(Comparator<? super E> comparator) {
this(new TreeMap<>(comparator));
}
*/
SuperETest test = new SuperETest();
Set<Programmer> programmers = new TreeSet<Programmer>(test.new Comp());
for (int i = 0; i < 10; ++i) {
programmers.add(test.new Programmer(10 - i + ""));
}
for (Programmer teacher : programmers) {
System.out.println(teacher.getName());
} } class Person {
private String name; Person(String name) {
this.name = name;
} public String getName() {
return name;
}
} class Programmer extends Person {
Programmer(String name) {
super(name);
} } class Comp implements Comparator<Person> { @Override
public int compare(Person o1, Person o2) {
return o1.getName().compareTo(o2.getName());
} }
}

【09-03】java泛型学习笔记的更多相关文章

  1. Java泛型学习笔记 - (七)浅析泛型中通配符的使用

    一.基本概念:在学习Java泛型的过程中, 通配符是较难理解的一部分. 主要有以下三类:1. 无边界的通配符(Unbounded Wildcards), 就是<?>, 比如List< ...

  2. Java泛型学习笔记--Java泛型和C#泛型比较学习(一)

    总结Java的泛型前,先简单的介绍下C#的泛型,通过对比,比较学习Java泛型的目的和设计意图.C#泛型是C#语言2.0和通用语言运行时(CLR)同时支持的一个特性(这一点是导致C#泛型和Java泛型 ...

  3. Java泛型学习笔记 - (六)泛型的继承

    在学习继承的时候, 我们已经知道可以将一个子类的对象赋值给其父类的对象, 也就是父类引用指向子类对象, 如: Object obj = new Integer(10); 这其实就是面向对象编程中的is ...

  4. Java泛型学习笔记 - (三)泛型方法

    泛型方法其实和泛型类差不多, 就是把泛型定义在方法上, 格式大概就是: public <类型参数> 返回类型 方法名(泛型类型 变量名) {...}泛型方法又分为动态方法和静态方法,:1. ...

  5. Java泛型学习笔记 - (二)泛型类

    1. 我们先写一个没有泛型的类Box: public class Box { private Object obj; public Box() {} public Object getObj() { ...

  6. Java泛型学习笔记

    泛型是Java5引进的新特征,是类和接口的一种拓展机制,主要实现参数化类型机制.Java的泛型,跟C++的类模板有很多相似的地方,或者说,就是C++类模板的升级版. 泛型类 在开发过程中,我们或许要设 ...

  7. Java泛型学习笔记 - (五)泛型接口

    所谓泛型接口, 类似于泛型类, 就是将泛型定义在接口上, 其格式如下: public interface 接口名<类型参数>如: interface Inter<T> { pu ...

  8. Java泛型学习笔记 - (四)有界类型参数

    1. 当我们希望对泛型的类型参数的类型进行限制的时候(好拗口), 我们就应该使用有界类型参数(Bounded Type Parameters). 有界类型参数使用extends关键字后面接上边界类型来 ...

  9. Java泛型学习笔记 - (一)泛型的介绍

    一.什么是泛型:泛型的作用是用来规定一个类, 接口或方法所能接受的数据的类型. 就像在声明方法时指定参数一样, 我们在声明一个类, 接口或方法时, 也可以指定其"类型参数", 也就 ...

随机推荐

  1. Linux 下编译openjdk

    操作系统ubuntu14.04 openjdk版本 7u4 openjdk7u4可以在https://jdk7.java.net/source.html下载   一.构建编译环境 sudo apt-g ...

  2. Windows10 会不会成为微软的新起点?

    Because if you change the way you see the world, you can change the world you see. 如果你改变看世界的方式,你就能改变 ...

  3. Entity Framework 6 with MySql

        MySQL Connector/Net 6.8.x MySQL Server 5.1 or above Entity Framework 6 assemblies .NET Framework ...

  4. 报表工具如何实现多次导入Excel

    很多人在开发报表的时候会遇到将多张表样相同的excel导入到模板,然后提交至数据库中.但问题是很多情况,在线导入不支持一次性选择多个excel,一次只能选择一个excel,也不能将多个excel中的数 ...

  5. 用CSS开启硬件加速来提高网站性能

    国外一篇文章,有点意思,转载过来,准备尝试下~ 中文地址:http://www.cnblogs.com/rubylouvre/p/3471490.html 原文地址:http://blog.teamt ...

  6. 团队项目——编写项目的Spec

    团队项目--编写项目的Spec 一.Spec的目标        spec主要用来说明软件的外部功能,和用户的交互情况,主要用来说明软件内部的设计.图片编辑器是与生活息息相关的一个必备软件,随的流行, ...

  7. UVA - 10375 Choose and divide[唯一分解定理]

    UVA - 10375 Choose and divide Choose and divide Time Limit: 1000MS   Memory Limit: 65536K Total Subm ...

  8. 解决www.github.com访问太慢的问题

    解决www.github.com访问太慢的问题 使用www.github.com的过程中,有时候打开会特别的慢,原因github.com的域名被一堵伟大的墙挡在了外面.但是我们可以通过修改本机的hos ...

  9. 如何进行安全测试-XSS篇

    XSS分为三类:Stored XSS.Reflected XSS.Dom-Base XSS (1)Stored XSS,即存储式跨站攻击,存储式跨站攻击简单来说就是攻击者提交给网站的数据会提交并永久保 ...

  10. PHP开发工具+电子书+视频教程等资料下载汇总

    本汇总帖包括如下内容: PHP开发工具.PHP IDE PHP学习资源 基础.进阶类 PHP学习资源 高级及应用类 经典PHP视频教程系列 1. PHP开发工具.PHP IDE: PHP开发工具:Ze ...