java之所以取消了模板,因为java和c相比,java有单根继承的特性
(所有的java类都继承object,如果你不明确写extends那么默认,继承object,
这样作的好处是如果你定义一个object的引用,那么它可以接受所有的对象。比如myVvector.add(Object o);,想想模板的作用是什么。
很多时候因为type的改变,要从类的模板定义一个新的模板类。来适应type的改变。java的单根特性可以取代模板的一部分作用的。但是java这样设计,方便了开发者。也牺牲了部分性能,由于object可以接受所有的class对象引用,所以也许你需要的是一个int对象的Vector,但放进去一个string对象的引用也不会编译期错误,很多bug会不好查。:((我的了解就这些了。不一定对的。参考而已。

解决方案 »

  1.   

    java的设计思想就是简化c++中复杂的部分,而模板也应该在此之列吧?
      

  2.   

    在今年的程序员杂志的8,9期讲了java的泛型技术,我看了下,跟c++的摸版很类似,有机会找来看看吧。
    不过jdk还没有引入进来,需要额外的工具辅助。
      

  3.   

    发个例子import java.util.*;interface Compare {
      boolean lessThan(Object lhs, Object rhs);
      boolean lessThanOrEqual(Object lhs, Object rhs);

    //////////////////////////////////////////////////////////////////////
    class SortVector extends Vector {
      private Compare compare; // To hold the callback
      public SortVector(Compare comp) {
        compare = comp;
      }
      public void sort() {
        quickSort(0, size() - 1);
      }
      private void quickSort(int left, int right) {
        if(right > left) {
          Object o1 = elementAt(right);
          int i = left - 1;
          int j = right;
          while(true) {
            while(compare.lessThan(
                  elementAt(++i), o1))
              ;
            while(j > 0)
              if(compare.lessThanOrEqual(
                 elementAt(--j), o1))
                break; // out of while
            if(i >= j) break;
            swap(i, j);
          }
          swap(i , right);
          quickSort(left, i-1);
          quickSort(i+1, right);
        }
      }
      private void swap(int loc1, int loc2) {
        Object tmp = elementAt(loc1);
        setElementAt(elementAt(loc2), loc1);
        setElementAt(tmp, loc2);
      }

    //////////////////////////////////////////////////////////////////////////
    public class StringSortTest {  static class StringCompare implements Compare {
        public boolean lessThan(Object l, Object r) {
          return ((String)l).toLowerCase().compareTo(
            ((String)r).toLowerCase()) < 0;
        }
        public boolean 
        lessThanOrEqual(Object l, Object r) {
          return ((String)l).toLowerCase().compareTo(
            ((String)r).toLowerCase()) <= 0;
        }
      }  public static void main(String[] args) {
        SortVector sv = 
          new SortVector(new StringCompare());
        sv.addElement("d");
        sv.addElement("A");
        sv.addElement("C");
        sv.addElement("c");
        sv.addElement("b");
        sv.addElement("B");
        sv.addElement("D");
        sv.addElement("a");
        sv.sort(); /*quickSort(0, size() - 1);*/    Enumeration e = sv.elements();
        while(e.hasMoreElements())
          System.out.println(e.nextElement());
      }
    }