【发布时间】:2014-02-20 23:12:07
【问题描述】:
作为我所教课程的自动评分器的一部分,我希望能够测试学生是否编写了返回类型为数字类型的方法(int、double、Integer、 Double 等)。我尝试这样做:
Method m = StudentClass.class.getDeclaredMethod(/* ... */);
return Number.class.isAssignableFrom(m.getReturnType());
如果方法的返回类型是Integer 或Double,此代码将正常工作,但如果它是int 或double,则不能正常工作。这让我很困惑,因为写是合法的
Number n = 137; // Assign an int to a Number
和
Number n = 1.608; // Assign a double to a Number
如果方法返回int 或double,为什么我上面写的代码不正确?除了硬编码测试结果是否为int、long、char、double等,我还能做些什么来测试该方法是否返回数字类型的结果?
谢谢!
【问题讨论】:
-
Ideone 为那些想玩的人提供样本。
-
您可以使用
Integer.TYPE、Double.TYPE等:ideone.com/gBqT3H。枚举它们并不优雅,因为它们之间没有继承关系,但它可以完成工作。 (如果有帮助,我会稍微回答一下。) -
另一个选项是检查
Class.isPrimitive(),并将非数字的原始类型列入黑名单,并可能添加非原始类型。我想您的根本问题是,在语言级别上,Java 并不真正关心“数字”这个概念。 -
Downvoter - 这个问题有什么问题我可以尝试改进吗?
标签: java class reflection casting numbers