Java可以返回浮点数还是整数?

时间:2014-01-28 05:48:57

标签: java function numbers integer

是否可以使用返回Integer或Float的函数?如果可能的话,我想让2个函数成为一个函数:

private static Integer parseStringFormatInt(String val){
    System.out.println(Integer.parseInt(val.substring(0, val.indexOf("."))));
    return Integer.parseInt(val.substring(0, val.indexOf(".")));
}
private static Float parseStringFormatFloat(String val){
    System.out.println(Float.parseFloat(val.substring(0, val.indexOf("."))));
    return Float.parseFloat(val.substring(0, val.indexOf(".")));
}

5 个答案:

答案 0 :(得分:8)

将返回类型设为Number,因为FloatInteger都是Number的子类型,如下所示

private static Number parseStringFormatNumber(String val){
    //Based on your conditions return either Float or Integer values
}

您还可以让instanceof运算符对返回值进行测试,以获取返回值的确切类型。即FloatInteger

if(returnedValue instanceof Float)
{
// type cast the returned Float value and make use of it
}
else if(returnedValue instanceof Integer)
{
// type cast the returned Integer value and make use of it
}

答案 1 :(得分:4)

您可以使用Number作为返回类型,或使方法通用

static <T extends Number> T parseString(String str, Class<T> cls) {
    if (cls == Float.class) {
        return (T) Float.valueOf(str);
    } else if (cls == Integer.class) {
        return (T) Integer.valueOf(str);
    }
    throw new IllegalArgumentException();
}

答案 2 :(得分:1)

您可以返回Number

private static Number parseStringFormatNumber(String val){
    try {
        return Integer.valueOf(val.substring(0, val.indexOf(".")));
    } catch (NumberFormatException e) {
        try {
            return Float.valueOf(val.substring(0, val.indexOf(".")));
        } catch (NumberFormatException e2) {
            // handle invalid value (throw exception, return 0?)
        }
    }
}

答案 3 :(得分:1)

我不会。我会让方法返回'float',小'f',或者更可能是'double';我会让它解析整个值而不需要任何子串操作;并且我会在需要它的呼叫站点值转换为'int',和/或从那里转换为Integer,Float,Double,......无论你在呼叫站点需要什么。

你会发现这比你接受的答案更有效率,这只是一个穷人的自我实现的运行时多态,你之前有编译时多态性。

但问题本身非常可疑。 Excel文件中没有整数和浮点数。只有十进制数字,小数位数为零或更多。

答案 4 :(得分:1)

或者,返回一个受歧视的联合,例如Either<Integer, Float>。在一个小型库中有一个独立的Either for Java 8实现,“矛盾”:http://github.com/poetix/ambivalence

Either<Integer, Float> either1 = Either.ofLeft(23);
Either<Integer, Float> either2 = Either.ofRight(Float.valueOf("3.14"));
BigDecimal result1 = either1.join(BigDecimal::valueOf, BigDecimal::valueOf);
BigDecimal result2 = either2.join(BigDecimal::valueOf, BigDecimal::valueOf);

你可以从Maven中心获得它:

<dependency>
    <groupId>com.codepoetics</groupId>
    <artifactId>ambivalence</artifactId>
    <version>0.2</version>
</dependency>