泛型

1. 泛型的简单使用: 1.5才有

List data = new ArrayList();
        data.add("xiaoer");
        data.add("20");
        
        Iterator iterator = data.iterator();
        while(iterator.hasNext()) {
            System.out.println(iterator.next());
        }

泛型是发生在编译时期的检查 防止强转等类型不一致报错

2泛型的移除和补偿

移除:

泛型会在运行时期移除因为java的类转换器(1.5)引入需要兼容 所以要移除泛型但是如何一旦移除了泛型 如果我们没有进行强转操作可能会调用一些无法调的方法 因此需要补偿

补偿:

系统会通过getclass()等获取对象真正的类型自动进行类型的转换

3.泛型的例子 Treeset(集合中不允许存在相同的元素通过接口Comparable 中的方法来比较 返回0就是相同否则不同)

instanceof 是否是某个类的实例

public class fanxing {
    public static void main(String[] args) {
        
        TreeSet set = new TreeSet();
        set.add(new Person("xiaoer11", 20));
        set.add(new Person("xiaoer11", 20));
        set.add(new Person("xiaoer3", 20));
        set.add(new Person("xiaoer4", 20));
        
        Iterator iterator = set.iterator();
        while(iterator.hasNext()) {
            System.out.println(iterator.next().toString());
        }
        
    }
}
class Person implements Comparable{
    String name;
    int age;
    
    
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
    public Person() {
        super();
        // TODO Auto-generated constructor stub
    }
    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;
    }

    
    public int compareTo(Object o) {
        // TODO Auto-generated method stub
        return 0;
    }
    
}
 
 

或者自定义一个比较器

TreeSet set = new TreeSet(new myComparator());

public class myComparator implements Comparator {
    public int compare(Person o1, Person o2) {
        return 0;
        // 在这里进行比较
        
    }
}

4.泛型类eg:

person p = new person()

这样可以显示的指定类中要操作的元素的类型 在编译时期就可以检测出类型的问题 防止类型强转等带来的问题

5.泛型方法:

可以显示的指定参数类型
void walk(T meter);

6.泛型接口

可以得到接口中的方法的参数等确定具体的类型 List

你可能感兴趣的:(泛型)