繁体   English   中英

如何添加两个Integer类(instanceof)

[英]How to add two Integer classes(instanceof)

我已经实现了这种方法:

    public static Object findInstance(Object value);

方法采用对象值并将类类型(如果可能)转换为Integer或Double。 调用findInstance之后,我想检查我的类类型,如下所示:

    value.getClass();

结果是java.lang.Double或java.lang.Integer。(符合预期)

但是我不能从该对象的Integer(或Double)类中调用任何方法。

最终结果应为:

    value1=findInstance(value1);
    value2=findInstance(value2);
    int sum=value1.intValue()+value2.intValue();
    System.out.println("Sum:"+sum);

有人可以解释为什么我不能调用方法intValue()吗?

关于此的一些评论:首先,azurefrog陈述了正确的原因:您的变量属于Object类型,而不是Number类型。

第二:如果要在对象上有条件地调用intValue()或doubleValue(),请让您的方法返回Number类型而不是Object类型的变量。

第三:我不知道您正在执行的任务,因此您可能有充分的理由这样做。 但是,尝试以不需要任何类型的强制转换操作或instanceof调用的方式编写代码。 通常,这些操作的出现是“设计气味”的迹象。 在您的情况下可能并非如此,但在我并非总是如此谦虚的观点中,这似乎有些可疑。

请注意,BigDecimal,BigInteger,Byte,Double,Float,Integer,Long,Short实现了Number接口(这些类将通过is-a Number测试),因此您不必“ findInstance”它们。 您可以使用数字界面:

if(obj instanceof Number) {
    Number number = (Number) obj;
    int value = number.intValue();
    ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM