Chinaunix首页 | 论坛 | 博客
  • 博客访问: 499721
  • 博文数量: 704
  • 博客积分: 39800
  • 博客等级: 大将
  • 技术积分: 4950
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-15 13:32
文章分类

全部博文(704)

文章存档

2011年(1)

2008年(703)

我的朋友

分类:

2008-10-15 13:45:00

    简介

    泛型其实并不是一种新的语言元素,中早就就有,但是在之后的java却没有吸收这个特性,现在也有了泛型的特性,大概也和。Net的竞争有关系吧。

    首先看泛型的一个应用。

    在过去,我们可能经常要写一些类似这样的代码:

List stringList=new LinkedList();
stringList.add("firstString");
stringList.add("secondString");
String str=(String)stringList.iterator().next();

    实际上第三行对String的类型转换意义并不大,因为通常我们如果在操作一个List,都是知道这个List里面放的是什么类型对象的,但是我们如果不这样写又通不过语法检查。

    利用java的泛型机制,我们可以这么写:

List stringList=new LinkedList();
stringList.add("firstString");
stringList.add("secondString");
String str=stringList.iterator().next();

    这样做的好处是在定义容器的时候就指明了容器中的类型,一方面我们不再需要取一个元素时候做强制类型转换,另外一方面如果在这个容器中放入的对象类型不符合要求,那么会在编译时候产生一个错误,而不是在运行时候才抛出一个异常。

    另外这样也提高了程序的可读性。

    泛型类型的定义

    下面是一个简单的使用泛型类的定义:

public class MyGenericClass {
    private T value;

    public T getValue() {
       return value;
    }

    public void setValue(T value) {
       this.value = value;
    }
}

    值得注意的一点是,静态变量不能够使用泛型定义,也就是说类似下面的语句是非法的:

public class MyGenericClass {
    public static T value;//错误的定义
}

    此外,泛型的定义不会被继承,举个例子来说,如果A是B的子类,而C是一个声明了泛型定义的类型的话,C不是C的子类。为了更好的说明,可以看下面的代码,这段代码是错误的。

List strList =new ArrayList();
List objList=strList;  //错误的赋值

    不过这样一段代码是正确的:

List strList =new ArrayList();
strList.add("a string");

[1]   

【责编:Chuan】

--------------------next---------------------

阅读(204) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~