Tuesday, April 23, 2013

JAVA的泛型

这里有一编刚开始学JAVA的时候些的心得06年的时候了.里面有很多想法不准确的.但是为了提醒自己.也放上来

看了几天的JAVA.在对象的容器中的那一部分时有这样的感想.
有些类的使用方法非常类似C++的类函数.如:ActionListener等使用起来感觉很爽.但是...
JAVA对在运行时实现类的对象没有C++那么灵活.给我的感觉是JAVA根本就没有实现泛型编程(Generic Programming)这个概念. 举个例子:
Java
int max(int [] obj,int length) {  
    int i,result;  
    result=obj[0];  
    for(i=1;i<length;i++) {  
        if(result<obj[i])result=obj[i];  
    }  
    return result;  
}  
  
float max(float [] obj,int length) {  
    int i;  
    float result;  
    result=obj[0];  
    for(i=1;i<length;i++) {  
        if(result<obj[i])result=obj[i];  
    }  
    return result;  
} 
但是用STL就可以这样简单的实现了.

C++
template<class T>
T max(T obj[],int length) {  
    int i;  
    T result;  
    result=obj[0];  
    for(i=1;i<length;i++) {  
        if(result<obj[i])  
            result=obj[i];  
    }  
    return result;  
}
java的那段程序只实现了int和float类的获得最大值的功能. 而且还要人工编写了2次代码.而C++那段代码就用1次代码编写. 就实现了任何重载了比较大小和赋值("<"和"=")2个操作符的类 的相同功能都实现了.
关于JAVA中的ArrayList好像是实现了泛型的概念.但是继续看下去才发现 这也是一个"伪泛型"工具.因为这个类定义的参数是Object.而JAVA中定义 类的时候如果没有指定继承的父类缺省是继承了Object这个最基本的基类.
在我印象中,面向对象的编程中,泛型编程是不可分割的一部分(这是我自己 主观认为的).难道JAVA就把OOP实现到这一步吗?

No comments:

Post a Comment