我想写一个矩阵类,为了使矩阵元素可以是任意数值类型,当然要用泛型。可是Integer,Double等基本类型的封装只能用运算符+-*\作运算,而BigInteger,BigDecimal只能用add()等方法操作,二者无法统一。尽管有公共基类Number,但它并没提供一个统一的操作接口。难道我要为每个数值类型都定义一个矩阵类吗?!在C++,C#等支持运算符重载的语言中,解决方案相当容易。即使不支持运算符重载,只要Java提供数值操作的统一接口,问题也不复杂,现在该怎么办?
更要命的是Integer不能继承,再加一层封装必然大大影响性能.....越来越发现Java泛型的丑陋

解决方案 »

  1.   

    1)用Integer,Double等效率肯定没有直接用基本数据类型int double等快;
    2)用什么要把事情搞得这么复杂呢?所有的都统一成double不又快又简单吗?精度应该也够用了吧.
      

  2.   

    如果能统一用Double当然好,但如果数值大得离谱,或者我不想有误差,还是要用BigDecimal.
    回2楼,泛型当然好,而且正是这个问题的解决方案。只是Java提供的泛型太差劲了
      

  3.   

    泛型是在工具类中不确定使用哪种类型,直到使用的时候才决定是那种类型的List<Double> ll = new ArrayLIst<Double>()另外你的要求也是可以满足的,在java里数值类型都是从Number继承的,你可以把你的矩阵类定义成public class Matrix<T extends Number>{}最后要说的是,定义自己的数据类型是一个很不错的主意,你觉得java api提供的类不够你用就自定定义把。