使用BigDecimal的泛型类出现incompatible bounds编译错误如何解决
解决泛型类Complex的编译错误
错误原因
你传入构造方法的12121是Integer类型的字面量,但泛型类Complex的类型参数T、R被限定为BigDecimal的子类,而Integer并非BigDecimal的子类,类型不匹配导致编译器无法正确推断泛型参数,从而抛出错误。
解决方案
构造Complex实例时,必须传入BigDecimal类型的对象,而非Integer字面量。可以通过BigDecimal.valueOf()方法或者new BigDecimal()将整数转换为BigDecimal实例,修正后的调用代码如下:
Complex<BigDecimal,BigDecimal> s = new Complex<>(BigDecimal.valueOf(12121), BigDecimal.valueOf(12121));
补充说明
原Complex类的add方法中存在强制类型转换(T) (r.add(other.r)),这里需要注意:r.add()返回的是BigDecimal实例,如果T是BigDecimal的自定义子类,这个强制转换会导致运行时类型转换异常。如果仅使用BigDecimal本身作为泛型参数,这个转换是安全的。
内容的提问来源于stack exchange,提问作者Khaled Osama
相关产品推荐
相关产品推荐

