我已经有一个解决方案,但我不喜欢它。此外,很高兴知道你对此的看法。使用Class.cast时无法将java.lang.Float强制转换为浮点型?
你会看到,elem.get
给出了Object
,这在x和y的情况下将是Float
。
此代码抛出在标题中描述的例外:
String names[] = { "x", "y", "src" };
Class types[] = { float.class, float.class, String.class };
for (int i = 0; i < names.length; i++)
{
if (elem.containsKey(names[i]))
{
par.add(types[i]);
arg.add(types[i].cast(elem.get(names[i])));
}
}
的代码被用于定义参数列表实例化对象。参数和对象的类名都是在外部数据文件中定义的(但对此不会有所了解)。
的解决方案,一些我不喜欢的(因为它失去了灵活性,我试图获得),具有此范围内的为:
if(types[i] == float.class)
{
float v = (Float)elem.get(names[i]);
arg.add(v);
} else
{
arg.add(types[i].cast(elem.get(names[i])));
break;
}
其他选项将在types
被改变float.class
到Float.class
,但我不会这样做,因为该代码用于实例化在其构造函数中具有参数float
的对象。
谢谢!
如果您使用的是Java 1.5或更高版本,则Floats会被自动取消装箱以浮动,否?你有没有尝试使用Float.class? – Spektr
正如我写的,我不想使用Float.class,因为我需要将参数用作实例后面的float。但是如果我在这段代码中使用Float.class,它就可以工作。它试图实例化构造函数浮动的Object时会失败。感谢您的回答! – huff
顺便说一句,我与Java 1.7。 – huff