是否可以使用返回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(".")));
}
答案 0 :(得分:8)
将返回类型设为Number
,因为Float
和Integer
都是Number
的子类型,如下所示
private static Number parseStringFormatNumber(String val){
//Based on your conditions return either Float or Integer values
}
您还可以让instanceof
运算符对返回值进行测试,以获取返回值的确切类型。即Float
或Integer
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>