首页 > 解决方案 > 如何将类数据类型作为参数传递并将其用于强制转换

问题描述

我该如何解决这个问题:

private <T> void myFunction(float value, Class<T> classType){
  System.out.println("Value = + (classType) value);
}

Java Main(){
  myFunction(3.214, Float.class);
  myFunction(432.13, Integer.class);
}

我期待输出:

3.214
432

但现在,我得到了错误。不能classType用于铸造。

标签: javagenericscasting

解决方案


您只能将对象引用强制转换为其祖先类型之一。

例如,这里您的对象是Float该类的一个实例。它的祖先是 Number 和 Object 类,以及接口SerializableComparable. 这些是您可以转换的唯一类型。

您不能将引用转换Float为引用,Integer因为Integer它不是Float,

您可以做的是传入一个函数,该函数使用您想要的任何机制将浮点数转换为您想要的任何类型。方法声明如下所示:

private static <T> void myFunction(float value, Function<Float, T> function){
    System.out.println("Value = " + function.apply(value));
}

你可以像这样使用它,例如:

myFunction(123.456f, Float::intValue);

推荐阅读