泛型

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

List<String> data = new ArrayList<String>();
        data.add("xiaoer");
        data.add("20");
        
        Iterator<String> 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<Person> set = new TreeSet<Person>();
        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<Person> iterator = set.iterator();
        while(iterator.hasNext()) {
            System.out.println(iterator.next().toString());
        }
        
    }
}
class Person implements Comparable<Object>{
    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<Person> set = new TreeSet<Person>(new myComparator());

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

4.泛型类eg:

person<String> p = new person<String>()

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

5.泛型方法:

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

6.泛型接口

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • object 变量可指向任何类的实例,这让你能够创建可对任何数据类型进程处理的类。然而,这种方法存在几个严重的问题...
    CarlDonitz阅读 4,429评论 0 5
  • 2.简单泛型 -********Java泛型的核心概念:告诉编译器想使用什么类型, 然后编译器帮你处理一切细节 2...
    CodingHou阅读 2,939评论 0 0
  • 本文大量参考Thinking in java(解析,填充)。 定义:多态算是一种泛化机制,解决了一部分可以应用于多...
    谷歌清洁工阅读 3,304评论 0 2
  • 泛型的好处 使用泛型的好处我觉得有两点:1:类型安全 2:减少类型强转 下面通过一个例子说明: 假设有一个Tes...
    德彪阅读 4,798评论 0 0
  • 谁给过我温暖给过我好给过我感动 别慌 我都记得 女人,作为这个地球上最高端最大气的生物,她们温柔、美丽、善良、大方...
    小烈呐阅读 2,372评论 2 1