`
海王子1994
  • 浏览: 43670 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

泛型

阅读更多
  众所周知,Object类型为所有类的父亲,它的引用可以接受任何类型的对象。传统的List类的add方法也是以Object类型为参数,自然对应的get方法返回的也是Object类型。多数情况下,我们只是将一种类型添加到集合类(如List)中,取出数据时都只能为Object,必须经过转换才能变回自己,此时泛型的出现便很好地解决了这个问题。
   泛型在创建对象时使用<类型>声明类型,如:
List<String>list=new LinkedList<String>();此时List便只能接受String类型的对象。

取一例子说明泛型的用法:

public class Testing {

public List<String>getList(){
List<String>list=new LinkedList<String>();//创建泛型List类对象
list.add("one");//将"one"添加到list
list.add("two");//将"two"添加到list
        list.add("three");//将"three"添加到list
        return list;
   
}

 
  public static void main(String[] args)
  {
     Testing test=new Testing();//创建对象
              List<String>list=test.getList();//创建List类对象,接受test中的字符串
              String s=list.get(0);//将list中的字符串赋值给s
     System.out.println(s);//输出s
  }

}

使用泛型的好处不外乎两点:

其一:当添加一个元素时,编译器可以根据参数化类型判断该类型是否合法;若非法,则报错。

其二:当取出元素时,可以直接获得参数化指定类型,并非原始Object类。


*泛型的检测只是在编译期间,所以关于参数化类型的信息都是在编译期处理的;在运行期间,它们就会被擦除!

需要提醒的是,即使两个类的参数类型存在继承关系,也不能进行如下操作;

List<Number>list=new LinkedList<Number>();
List<Byte>list2=new LinkedList<Byte>();//不能这样操作
list=list2             //泛型的参数不能当作父类与子类那样使用。

除了系统本身有的泛型,我们可以自定义泛型使用,例子如下:

public class Testing<E> {
private List<E>list;
private final int size;
public Testing(int size)
{
    list=new ArrayList<E>();
    this.size=size;
}
public void add(E e)
{
if(list.size()<size)
{
     list.add(e);
     System.out.println("元素"+e+"添加成功!");

}
else{
      System.out.println("空间已满,无法再添加!");
}
}
public void remove(int index)
{
if(index>=list.size())
{
System.out.println("index过大!");
}
else{
E e=list.remove(index);
System.out.println("元素"+e+"已成功删除!");
}
}

 
  public static void main(String[] args)
  {
Testing<Integer>ab1=new Testing<Integer>(3);
ab1.add(1);
ab1.add(2);
ab1.add(3);
ab1.add(4);
ab1.remove(4);
ab1.remove(0);
//////////////////////////////////////////////////////////////////////////
Testing<String>ab2=new Testing<String>(4);
ab2.add("gold");
ab2.add("wood");
ab2.add("water");
ab2.add("fire");
ab2.add("earth");
ab2.remove(3);
  }


}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics