泛型名字听起来很高深的样子,其实理解起来也不难。
什么时候用到泛型,为什么要用泛型呢。
下面我讲一下原因
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);
这种情况下我们不需要强制转化。
------------------------------------------------------------------
上面讲的是泛型的两种好处
第一 无需重载
第二 无需强制转换类型
泛型的应用还用于方法和接口
他的作用大多都一样。(菜鸟的初理解)