JAVA中泛型的理解

来源:互联网 发布:闲来麻将服务器源码 编辑:程序博客网 时间:2024/06/07 03:18

1.什么是泛型:
泛型:JDK1.5版本之后出现的新特性,用于解决安全问题,是一个安全机制;
我们用一个简单例子来展示。

public class Demo {    public static void main(String[] args) {        ArrayList<String> array=new ArrayList<>();        array.add("ashin");        array.add("monster");        array.add("stone");        array.add("masa");        array.add("ming");        array.add(5);        Iterator<String> iterator = array.iterator();        while(iterator.hasNext()){            String str = iterator.next();            System.out.println(str);        }    }       }

我们运行程序会出现:
Exception in thread “main” java.lang.Error: Unresolved compilation problem:
The method add(int, String) in the type ArrayList is not applicable for the arguments (int);

这就说明我们将ArrayList的类型指定为String类型了,这样当我们传入int类型的时候就会报错

2.泛型类

public class Demo {    public static void main(String[] args) {        Tool tool=new Tool();        tool.setS(new Student("monster")))        System.out.println(t.getS().toString());        }}//对Student添加工具类class Tool{    private Student s;    public Student getS() {        return s;    }    public void setS(Student s) {        this.s = s;    }}class Student{    private String name;    public Student(String name){        this.name=name;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    @Override    public String toString() {        return name;    }}class worker{}

//这样我们通过Tool类就可以访问我们的Studnet.class了,但是如果我们又要需要一个工具类去操作worker.class那我们又要去从写一个基于worker的工具类了。这时我们不妨用泛型

class tool<T>{    private T t;    public T getT() {        return t;    }    public void setT(T t) {        this.t = t;    }}

这样我们就可以对每一个类为所欲为了,不用再去为每一个类写工具类了。

eg:    tool<Student> t=new tool();    t.setT(new Student("ashin"));    System.out.println(t.getT().toString);

什么时候定义泛型类?
当类中要操作的引用数据类型不确定的时候,早期定义Object来完成扩展,现在定义泛型来完成扩展。

3.泛型方法

public class Demo {    public static void main(String[] args) {        Text<String> text=new Text();        text.show("ashin");        text.shard("monster");    }}class Text<T>{    public void show(T t){        System.out.println("show"+t);    }    public void shard(T t){        System.out.println("shard"+t);    }}

// 为了让不同的方法可以操作不同的类型,而且类型不确定,那么可以将泛型定义在方法上。

class Text{    public <T> void show(T t){    }    public <T> void shard(T t){    }}

4.泛型接口

public class Demo {    public static void main(String[] args) {        //定义泛型类型        InterImpl<Integer> i = new InterImpl<Integer>();        i.show(55);    }}//实现类class Imp<T> implements Inter<T>{    @Override    public void show(T t) {        System.out.println("show:" + t);    }}interface Inter<T> {    void show(T t);}

//感谢博客名为刘某人的java之旅,我想现在大家对泛型都有一个很好的理解了吧!

1 0
原创粉丝点击