如何添加两个Integer类(instanceof)

时间:2014-04-16 22:25:16

标签: java instanceof

我已实施此方法:

    public static Object findInstance(Object value);

Method获取对象值并将类类型(如果可能)转换为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()?

2 个答案:

答案 0 :(得分:2)

对此有一些评论: 首先,azurefrog说明了正确的原因:你的变量是Object类型,而不是Number类型。

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

第三:我不知道你正在执行的任务,所以你可能有充分的理由这样做。然而,尝试以不需要任何排序或调用instanceof的强制转换操作的方式编写代码。通常,这些操作的存在是设计气味的标志。它可能不是你的情况,但在我不那么谦虚的意见中似乎有点可疑。

答案 1 :(得分:0)

请注意,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();
    ...
}