Java集合框架 Map和泛型
作者:网络转载 发布时间:[ 2013/12/19 11:32:05 ] 推荐标签:
静态方法泛型
特殊之处:
静态方法不可以访问类上定义的泛型。
如果静态方法操作的引用数据类型不确定,可以将泛型定义在方法上。
|
class Demo<T>{
//show()方法的类型由类的类型决定
public void show(T t){
System.out.println("show:"+t);
}
//print()方法的类型由自己决定
public <Q> void print(Q q){
System.out.println("print:"+q);
}
//静态方法泛型
public static <W> void method(W w){
System.out.println("methld:"+w);
}
}
class GenericDemo{
public static void main(String[] args){
Demo<String> d = new Demo<String>();
d.print(8);
d.print(new Integer(5));
d.print("heihei");
d.show("haha");
//d.show(5);
d.method("Hello");
}
}
/*
结果
print:8
print:5
print:heihei
show:haha
methld:Hello
*/
泛型限定
上限:<? extends E> 可以接受E类型或者E的子类型。
下限:<? super E> 可以接收E类型或者E的父类型。
import java.util.*;
class Person{
private String name;
Person(String name){
this.name=name;
}
public String getName(){
return name;
}
}
class Student extends Person{
Student(String name){
super(name);
}
}
class GenericDemo{
public static void main(String[] args){
ArrayList<Person> arr1 = new ArrayList<Person>();
arr1.add(new Person("Person01"));
arr1.add(new Person("Person02"));
arr1.add(new Person("Person03"));
ArrayList<Student> arr2 = new ArrayList<Student>();
arr2.add(new Student("Student01"));
arr2.add(new Student("Student02"));
arr2.add(new Student("Student03"));
printColl(arr2);
}
public static void printColl(ArrayList<? extends Person> arr1){
//泛型限定在Person或者Person的子类,是继承Person类
Iterator<? extends Person> it = arr1.iterator();
while(it.hasNext()){
System.out.println(it.next().getName());
}
}
}
/*
结果
Student01
Student02
Student03
*/
|
泛型扩展
泛型限定是用于泛型扩展用的。
|
import java.util.*;
class GenericDemo{
public static void main(String[] args){
//指定为Student类型,传递一个比较器
TreeSet<Student> ts = new TreeSet<Student>(new Comp());
ts.add(new Student("Student01"));
ts.add(new Student("Student05"));
ts.add(new Student("Student09"));
ts.add(new Student("Student08"));
Iterator<Student> it = ts.iterator();
while(it.hasNext()){
System.out.println(it.next().getName());
}
//指定为Worker类型,传递一个比较器
TreeSet<Worker> wo = new TreeSet<Worker>(new Comp());
wo.add(new Worker("Worker01"));
wo.add(new Worker("Worker05"));
wo.add(new Worker("Worker09"));
wo.add(new Worker("Worker08"));
wo.add(new Worker("Worker07"));
Iterator<Worker> it1 = wo.iterator();
while(it1.hasNext()){
System.out.println(it1.next().getName());
}
}
}
/*
//学生比较器
class StudentComp implements Comparator<Student>{
public int compare(Student s1,Student s2){
return s1.getName().compareTo(s2.getName());
}
}
//工人比较器
class WorkerComp implements Comparator<Worker>{
public int compare(Worker s1,Worker s2){
return s1.getName().compareTo(s2.getName());
}
}
//对上面两个比较器进行优化如下,指定为父类型Person
*/
class Comp implements Comparator<Person>{
public int compare(Person s1,Person s2){
//return s1.getName().compareTo(s2.getName());//正序打印
return s2.getName().compareTo(s1.getName());//倒序打印
}
}
class Person{
private String name;
Person(String name){
this.name = name;
}
public String getName(){
return name;
}
public String toString(){
return "person:"+name;
}
}
class Student extends Person{
Student(String name){
super(name);
}
}
class Worker extends Person{
Worker(String name){
super(name);
}
}
/*
结果
Student09
Student08
Student05
Student01
Worker09
Worker08
Worker07
Worker05
Worker01
*/
|
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
Java性能测试有哪些不为众人所知的原则?Java设计模式??装饰者模式谈谈Java中遍历Map的几种方法Java Web入门必知你需要理解的Java反射机制知识总结编写更好的Java单元测试的7个技巧编程常用的几种时间戳转换(java .net 数据库)适合Java开发者学习的Python入门教程Java webdriver如何获取浏览器新窗口中的元素?Java重写与重载(区别与用途)Java变量的分类与初始化JavaScript有这几种测试分类Java有哪四个核心技术?给 Java开发者的10个大数据工具和框架Java中几个常用设计模式汇总java生态圈常用技术框架、开源中间件,系统架构及经典案例等

sales@spasvo.com