android培训、java培训、期待与您交流! ----------
泛型问题
----------------JDK1.5版本以后出现新特性。
----------------用于解决安全问题,是一个类型安全机制。
1. 格式问题 写在类的后面 ,通过<>表示
例如 ArrayList<String> al = new ArrayList<String>();
表示只能存储String类型的字符串.
2. 泛型优点
安全性提高--出现问题的情况由运行时期,提升到了编译时期
避免了强制转换
3. 泛型在TreeSet中的使用
4. 泛型类,泛型方法
5. 泛型的通配符 <?>
6. 泛型的限定
<? extends E> 接收E类型和E的子类型,上限限定
<? super E> 接收E类型和E的父类型 ,下限限定
//代码示例1
import java.util.ArrayList;
import java.util.Iterator;
public class GenericDemo01
{
public static void main(String[] args)
{
ArrayList<Person> al= new ArrayList<Person>();
al.add(new Person("wangwu01",20));
al.add(new Person("wangwu02",21));
al.add(new Person("wangwu03",22));
al.add(new Person("wangwu04",23));
Iterator<Person> it = al.iterator();
while(it.hasNext())
{
Person p =it.next();
System.out.println(p.getName()+"..."+p.getAge());
}
}
}
class Person
{
private String name;
private int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
//代码示例2
import java.util.*;
public class GenericDemo02
{
public static void main(String[] args)
{
TreeSet<Person03> al = new TreeSet<Person03>();
//HashSet<Person03> al =new HashSet<Person03>();
//ArrayList<Person03> al = new ArrayList<Person03>();
al.add(new Person03("dhangsan01",20));
al.add(new Person03("zhangsan02",25));
al.add(new Person03("ahangsan03",23));
al.add(new Person03("fhangsan04",22));
al.add(new Person03("changsan05",28));
Iterator<Person03> it = al.iterator();
while(it.hasNext())
{
Person03 p = it.next();
System.out.println(p.getName()+"..."+p.getAge());
}
}
}
class Person03 implements Comparable<Person03>
{
private String name;
private int age;
Person03(String name, int age)
{
this.name = name;
this.age = age;
}
public int compareTo(Person03 obj)
{
Person03 p = (Person03)obj;
int num = this.age - p.age;
return num==0?this.name.compareTo(p.name):num;
}
public boolean equals(Object obj)
{
if(this==obj)
return true;
if(!(obj instanceof Person03))
return false;
Person03 p = (Person03)obj;
return this.name.equals(p.name) &&this.age==p.age;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return age;
}
}
//代码示例3
class MyCom1 implements Comparator<Person04>
{
public int compare(Person04 p1, Person04 p2)
{
int num= p1.getAge() -p2.getAge();
return num==0?p1.getName().compareTo(p2.getName()):num;
}
}
//代码示例4
import java.util.*;
public class GenericDemo04
{
public static void main(String[] args)
{
//创建一个程序员集合 用来存储程序员元素
ArrayList<ProGrammer> ap = new ArrayList<ProGrammer>();
ap.add(new ProGrammer("zhangsan", "001", 20));
ap.add(new ProGrammer("zhangsan", "002", 24));
ap.add(new ProGrammer("zhangsan", "003", 30));
//迭代程序员集合
iterators(ap);
//创建经理集合.用来存储经理元素
ArrayList<Manager> am = new ArrayList<Manager>();
am.add(new Manager("lisi", "AA1", 40));
am.add(new Manager("lisi", "AA2", 50));
am.add(new Manager("lisi", "AA3", 44));
//迭代经理集合
iterators(am);
}
//创建迭代器,泛型通配符,
private static void iterators (Collection<? extends Employee> coll)
{
Iterator<? extends Employee> it = coll.iterator();
while(it.hasNext())
{
Employee p= it.next();
p.job();
}
}
}
//定义一个共性类,
abstract class Employee
{
private String name;
private String id;
private int d;
Employee(String name, String id, int d)
{
super();
this.name = name;
this.id = id;
this.d = d;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getD() {
return d;
}
public void setD(int d) {
this.d = d;
}
public abstract void job();
}
//定义经理类,类中有属性 和工作方法
class Manager extends Employee
{
public Manager(String name, String id, int d)
{
super(name, id , d);
}
public void job()
{
System.out.println(getName()+"..."+getId()+"...zai shihui");
}
}
//定义程序员类,类中有属性和 工作方法
class ProGrammer extends Employee
{
public ProGrammer(String name, String id, int d)
{
super(name, id, d);
}
public void job()
{
System.out.println(getName()+"..."+getId()+"...zai gzuo");
}
}
//代码示例5
/*
* 泛型方法
* 泛型类
*/
class Gen<QQ>
{
public void show(QQ q)
{
System.out.println("show..."+q);
}
//静态方法上定义泛型,<>需要写在static之后
public static<TT> void method(TT t)
{
System.out.println("method..."+t);
}
}
public class GenericDemo05
{
public static void main(String[] args)
{
Gen<String> gen = new Gen<String>();
gen.show("hello");
Gen.method(1234);
}
}