静态方法的泛型

    /**
* @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. 深度理解Jquery 中 offset() 方法

    参考原文:深度理解Jquery 中 offset() 方法

  2. 浅谈Java中的equals和==

    浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = ...

  3. NOIP模拟赛20161023

    题目名 双色球 魔方 czy的后宫 mex 源文件 ball.cpp/c/pas cube.cpp/c/pas harem.cpp/c/pas mex.cpp/c/pas 输入文件 ball.in c ...

  4. UVA - 11987 Almost Union-Find[并查集 删除]

    UVA - 11987 Almost Union-Find I hope you know the beautiful Union-Find structure. In this problem, y ...

  5. 配置jpa

    persistence.xml <?xml version="1.0" encoding="UTF-8"?> <persistence ver ...

  6. SQL获取本周、本月、本季度的记录的语句

    前提条件:假设表名为:tableName:时间字段名为:theDate ①查询本周的记录 select * from tableName where DATEPART(wk, theDate) = D ...

  7. ASP.NET MVC - 探究应用程序文件夹

    为了学习 ASP.NET MVC,我们将构建一个 Internet 应用程序. 第 2 部分:探究应用程序文件夹. MVC 文件夹 一个典型的 ASP.NET MVC Web 应用程序的文件夹内容如下 ...

  8. MongoDB之分片集群与复制集

    分片集群 1.1.概念 分片集群是将数据存储在多台机器上的操作,主要由查询路由mongos.分片.配置服务器组成. ●查询路由根据配置服务器上的元数据将请求分发到相应的分片上,本身不存储集群的元数据, ...

  9. angularjs + fis +modJS 对于支持amd规范的组建处理(PhotoSwipe 支持,百度webUpload支持)

    这不是很好的处理方式,但是能够解决问题,希望有大神推荐更好的方式. 前端模块使用angularjs + fis +modJS 开发前端应用有两个月了.总结了以下的优点: fis 自动构建,自动发布,功 ...

  10. Dribbble for windows phone 8

    正如你看到文章的标题所示.这是一个Dribbble 基于windows phone 8的客户端.[开源项目] 对于大部分的开发人员来说很少关注Dribbble[不妨打开看看或是注册一个player账号 ...