首页 > 解决方案 > 泛型中的通配符参数

问题描述

在下面的程序中,方法中的步骤ob.num.doubleValue()是如何absEqual()工作的?它想做什么?

class NumericFns<T extends Number>{
     T num;  

     NumericFns(T n ){
         num = n ;
        }

     boolean absEqual(NumericFns<?> ob) {
         if (Math.abs(num.doubleValue())== 
                 Math.abs(ob.num.doubleValue())) 
             return true ;
         return false ;
     }
}

public class demo  {

    public static void main(String[] args) {
        NumericFns<Integer> iob = new NumericFns<Integer>(6) ;
        NumericFns<Double> dob = new NumericFns<Double>(-6.0) ;
        if(iob.absEqual(dob))
            System.out.println("Absolute Values are equal") ;
        else
            System.out.println("They differ") ;         
    }    
}

标签: javaoopgenerics

解决方案


类型参数T有一个上限Number,意味着它等于类型T或其子类型。因此,您可以调用Number类型变量的方法T,例如在本例中的方法doubleValue()

请参阅有界类型参数说明。

因此,true当且仅当两个数字的双精度值相同时,此方法才会返回。这可能是Integer值 1 和Double值 1.0 的情况。

请注意,方法实现可以简化为

     boolean absEqual(NumericFns<?> ob) {
         return Math.abs(num.doubleValue()) == Math.abs(ob.num.doubleValue()));
     }

推荐阅读