【09-03】java泛型学习笔记
静态方法的泛型
/**
* @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泛型学习笔记的更多相关文章
- Java泛型学习笔记 - (七)浅析泛型中通配符的使用
一.基本概念:在学习Java泛型的过程中, 通配符是较难理解的一部分. 主要有以下三类:1. 无边界的通配符(Unbounded Wildcards), 就是<?>, 比如List< ...
- Java泛型学习笔记--Java泛型和C#泛型比较学习(一)
总结Java的泛型前,先简单的介绍下C#的泛型,通过对比,比较学习Java泛型的目的和设计意图.C#泛型是C#语言2.0和通用语言运行时(CLR)同时支持的一个特性(这一点是导致C#泛型和Java泛型 ...
- Java泛型学习笔记 - (六)泛型的继承
在学习继承的时候, 我们已经知道可以将一个子类的对象赋值给其父类的对象, 也就是父类引用指向子类对象, 如: Object obj = new Integer(10); 这其实就是面向对象编程中的is ...
- Java泛型学习笔记 - (三)泛型方法
泛型方法其实和泛型类差不多, 就是把泛型定义在方法上, 格式大概就是: public <类型参数> 返回类型 方法名(泛型类型 变量名) {...}泛型方法又分为动态方法和静态方法,:1. ...
- Java泛型学习笔记 - (二)泛型类
1. 我们先写一个没有泛型的类Box: public class Box { private Object obj; public Box() {} public Object getObj() { ...
- Java泛型学习笔记
泛型是Java5引进的新特征,是类和接口的一种拓展机制,主要实现参数化类型机制.Java的泛型,跟C++的类模板有很多相似的地方,或者说,就是C++类模板的升级版. 泛型类 在开发过程中,我们或许要设 ...
- Java泛型学习笔记 - (五)泛型接口
所谓泛型接口, 类似于泛型类, 就是将泛型定义在接口上, 其格式如下: public interface 接口名<类型参数>如: interface Inter<T> { pu ...
- Java泛型学习笔记 - (四)有界类型参数
1. 当我们希望对泛型的类型参数的类型进行限制的时候(好拗口), 我们就应该使用有界类型参数(Bounded Type Parameters). 有界类型参数使用extends关键字后面接上边界类型来 ...
- Java泛型学习笔记 - (一)泛型的介绍
一.什么是泛型:泛型的作用是用来规定一个类, 接口或方法所能接受的数据的类型. 就像在声明方法时指定参数一样, 我们在声明一个类, 接口或方法时, 也可以指定其"类型参数", 也就 ...
随机推荐
- Linux indent
一.简介 indent可辨识C的原始代码文件,并加以格式化,以方便程序设计师阅读. 二.选项 http://www.runoob.com/linux/linux-comm-indent.html 三. ...
- 添加文件到HDFS的集中缓存
需求是这样的,有一些文件,需要常驻内存,提高读取效率的情况下,可以使用HDFS的缓存机制进行预先缓存 先添加POOL,然后添加需要缓存的文件即可 hdfs cacheadmin -.tar.gz - ...
- [bootstrap]bootstrap2如何引导div垂直居中
参考网址:http://www.4byte.cn/question/138712/bootstrap-how-to-center-vertical.html 部分参考自上面网页中的方法.用过boots ...
- EF with (LocalDb)V11.0
EF虽说对LocalDb支持的不错,但LocalDb有自身的缺陷(不想sqlite那样数据库文件可以像普通文件一样使用). LocalDb在一个计算机上会对数据库有唯一性约束,要求本机的localdb ...
- java进程占用CPU资源过高分析脚本
#!/bin/bash #输入占用CPU较高的进程号 pid=$ if [ -z $pid ] then echo "PID is NULL" exit fi #找到该进程中占用较 ...
- BIOS设置和CMOS设置的区别与联系
BIOS是主板上的一块EPROM或EEPROM芯片,里面装有系统的重要信息和设置系统参数的设置程序(BIOS Setup程序): CMOS是主板上的一块可读写的RAM 芯片,里面装的是关于系统配置的具 ...
- 85 megacli-查看raid信息
文章本身我不做过多修改了,在这里我就把自己在安装时候碰到的难点跟大家提下.1.何处下载?首先,根据文章中的路径已经下载不到相应的文件了,在此我们就自己到http://www.lsi.com的网站上去搜 ...
- 软件工程(FZU2015)赛季得分榜,第一回合
目录 第一回合 第二回合 第三回合 第四回合 第五回合 第6回合 第7回合 第8回合 第9回合 第10回合 第11回合 积分规则 积分制: 作业为10分制,练习为3分制:alpha30分: 团队项目分 ...
- lvs/dr配置
lvs/dr Director server : DIP:192.168.1.100/24 eth0 VIP:192.168.1.101/24 eth0:0 Real server: Real1: ...
- Thinking in java学习笔记之interface
(完全解耦)策略设计模式: