java:运行时相当于数字类型之间的转换

标签 java casting primitive-types

当我在编译时知道对象类型时,我可以做到这一点:

int obj1 = 3;
float obj2 = (float)obj1;
int obj3 = (int)obj1;
short obj4 = (short)obj1;

在运行时已知对象类型的情况下,在数字类型之间产生相同转换的最有效的简单方法是什么?

// given a primitive (or boxed primitive) number class,
// returns a number that's a boxed instance of that class, 
// equivalent in value to the appropriate primitive cast
// (otherwise throws an IllegalArgumentException)
public Number runtimeNumericCast(Number sourceNumber, 
         Class<?> resultType)
{
   ...
}

Number obj1 = 3;  // really an Integer
Number obj2 = runtimeNumericCast(obj1, Float.class); // will return 3.0f
Number obj3 = runtimeNumericCast(obj2, int.class) // will return 3
Number obj4 = runtimeNumericCast(obj3, Short.class) // will return (short)3

我能想到的最好的方法是使用 Map<Class<?>, Function<Number,Number>>并为 6 种数字基元类型中的每一种声明一个函数以返回 Number.byteValue() , Number.shortValue() , Number.intValue() , Number.longValue() , Number.floatValue() ,和Number.doubleValue() .

最佳答案

这就是我会做的方式,除了方法签名以避免不必要的转换:

public <T extends Number> T runtimeNumericCast(Number sourceNumber, 
         Class<T> resultType)

关于java:运行时相当于数字类型之间的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6048957/

相关文章:

java - 无法运行android测试套件: Exception in thread "main" java. lang.ClassNotFoundException

java - 究竟什么时候需要类型转换?

c++ - 我可以规定模板类成员仅为 C++03 的原始类型吗?

c++ - 原始类型的完美转发

java - Spring MVC 将请求从 Cp1252 编码为 UTF-8

java - 它创建的实例可访问的实例

java - JLS 与类型转换相关

java - 能够将 ArrayList<Set<String>> 转换为 ArrayList<String> String 而不会出现类转换异常

java - 拆箱如何在短路 boolean 表达式中工作?

java - 白屏和崩溃-Android Studio