java 泛型限制_对Java中泛型限定中上限和下限的理解

泛型限定中的上限和下限两个不同的概念,用法完全不同。

上限

package com.heihei.test8;

import java.util.*;

public class GenericTest {

public static void main(String[] args) {

ArrayList list1 = new ArrayList<>();

list1.add(new Student("12"));

list1.add(new Student("02"));

list1.add(new Student("e12"));

list1.add(new Student("g12"));

printList(list1);

ArrayList list2 = new ArrayList<>();

list2.add(new Worker("2"));

list2.add(new Worker("d"));

list2.add(new Worker("e12"));

list2.add(new Worker("g12"));

printList(list2);

}

/*

*

* 上限,用在声明一个集合,类似父类引用指向子类对象

* */

public static void printList(ArrayList extends Persion> list) {

Iterator iterator = list.iterator();

while (iterator.hasNext()) {

System.out.println(iterator.next());

}

}

}

class Persion {

private String name;

public Persion(String name) {

this.name = name;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

class Student extends Persion {

public Student(String name) {

super(name);

}

}

class Worker extends Persion {

public Worker(String name) {

super(name);

}

}

上限

package com.heihei.test7;

import java.util.ArrayList;

import java.util.Comparator;

import java.util.Iterator;

import java.util.TreeSet;

public class GenericTest {

public static void main(String[] args) {

/*

* Comp1标识出Persion是Student的父类, super E>

*

* */

TreeSet ts1 = new TreeSet<>(new Comp1());

ts1.add(new Student("12"));

ts1.add(new Student("02"));

ts1.add(new Student("e12"));

ts1.add(new Student("g12"));

Iterator i1 = ts1.iterator();

while (i1.hasNext()) {

System.out.println(i1.next());

}

/*

* Comp1标识出Persion是Worker的父类, super E>

*

* */

TreeSet ts2 = new TreeSet<>(new Comp1());

ts2.add(new Worker("2"));

ts2.add(new Worker("d"));

ts2.add(new Worker("e12"));

ts2.add(new Worker("g12"));

Iterator i2 = ts2.iterator();

while (i2.hasNext()) {

System.out.println(i2.next());

}

}

}

/**

* 向上限定,标识出一个父类

*

* TreeSet(Comparator super E> comparator)

*

*/

class Comp1 implements Comparator {

@Override

public int compare(Persion p1, Persion p2) {

return p1.getName().compareTo(p2.getName());

}

}

class Persion {

private String name;

public Persion(String name) {

this.name = name;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

class Student extends Persion {

public Student(String name) {

super(name);

}

}

class Worker extends Persion {

public Worker(String name) {

super(name);

}

}

从上面的代码可以看出,上限中

TreeSet(Comparator super E> comparator)

TreeSet的构造方法需要 声明元素 父类 的比较器即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值