爱程序网

java泛型

来源: 阅读:

泛型名字听起来很高深的样子,其实理解起来也不难。

什么时候用到泛型,为什么要用泛型呢。

下面我讲一下原因

public class Fanxing
{
    public static void main(String[] args)
    {
        Lei l1=new Lei("12354");
        Lei l2=new Lei(5);
    }
}
class Lei
{
    String str;
    Integer in;
    public Lei(String str)
    {
        this.str=str;
    }
    public Lei(Integer in)
    {
        this.in=in;
    }
}

从上面的代码我们看到,当我们需要新建两个不一样类型的对象的时候

我们需要重载不同的方法。

而泛型就很好的解决这个问题

class FanLei<T>
{
    T l;
    public FanLei(T l)
    {
        this.l=l;
    }
}

在这里T就类似我们的传值参数,比如 int char类型的参数

这样我们新建不同的对象的时候就不必再重载了。

总的来说,就是说T是某一种类型,可以是任何一个类型,而这个类型由

你来决定,这就避免了像前面一样,需要重载。

public class FanxianDemo<T>//作为一个参数,就想方法中的形参类似
{
    private T[] array;//类似参数 
    public void setT(T[] array)
    {
        this.array=array;//传入数组类型,自己得到类型
    }
    public T[] getT()
    {
        return array;
    }
    public static void main(String[] args)
    {
        FanxianDemo<String> a=new FanxianDemo<String>();
        String [] array={"红色","白色","绿色"};
        a.setT(array);//自动得到类型
        for(int n=0;n<a.getT().length;n++)
        {
            System.out.println(array[n]);
        }
    }
}

上面是当类型参数是泛型的例子。

在上面我们传入的是String类,我们同样可以传入Integer类 

那么后面的就是Integer的对象数组。

这就是泛型的好处,你不必重载两个构造器,一个String 一个Integer

------------------------------------------------------------------

下面将另一个好处。迭代

ArrayList arr1=new ArrayList();
arr1.add("12354");
String obj=arr1.get(0);(报错)

在这里会报错原因是这里得到的对象是Object类的

需要我们强制转换为String类

而如果是下面这种情况

ArrayList <String> arr=new ArrayList<String>();
arr.add("12354");
String obj1=arr.get(0);

这种情况下我们不需要强制转化。

------------------------------------------------------------------

上面讲的是泛型的两种好处

第一 无需重载

第二 无需强制转换类型

泛型的应用还用于方法和接口

他的作用大多都一样。(菜鸟的初理解)

关于爱程序网 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助