gpt4 book ai didi

java - 测试方法的返回类型是否为数字?

转载 作者:行者123 更新时间:2023-12-02 04:18:16 25 4
gpt4 key购买 nike

作为我所教授类(class)的自动评分器的一部分,我希望能够测试学生是否编写了返回类型为数字类型的方法( intdoubleIntegerDouble等)。我尝试按如下方式执行此操作:

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等等,如何测试该方法返回的结果是否为数字类型?

谢谢!

最佳答案

此解决方案没有触及根本原因,而是提供了一种解决方法。它不是很优雅,但考虑到它永远不会改变(除非 Java 以某种方式添加新的数字类型),出于清晰的原因,我愿意忍受它。

public class Main {
private static List<String> validTypes = new ArrayList<String>() {{
add("int");
add("Integer");
add("double");
add("Double");
add("long");
add("Long");
add("float");
add("Float");
}};
public static void main(String[] args) {
Main main = new Main();
for(Method m : main.getClass().getDeclaredMethods()){
System.out.println(m.getName() + ": " + validTypes.contains(m.getReturnType().getSimpleName()));
}
}

public static int mInt(){ return 1; }

public static Integer mInteger(){ return 1; }

public static double mDouble(){ return 1.0; }

public static Double mDoubleD(){ return 1.0; }
}

输出

main: false
mDoubleD: true
mInt: true
mInteger: true
mDouble: true

关于java - 测试方法的返回类型是否为数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21921763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com