在运行时,在我的Java程序中,给定一个String,我想知道返回类型。例如:
1 + 1返回int
1L + 1L会传回long
1L + 1返回long
1 + 1.5返回double
1 + 2 - 3 * 4 / 5返回int
1 / 0返回int
1 + Math.nextInt()返回int
1.5 + Math.nextInt()返回double
Color.RED返回java.awt.Color
鉴于a是一个int:a + 1返回int
鉴于a是一个int:a + 1.5返回double
没有必要实际评估代码:我只需要返回类型。我该如何使用JDK运行时编译器,ECJ JDT或任何其他纯Java依赖项来执行此操作?
详细代码:下面是此代码的简化的伪代码单元测试:
public static void ExpressionTyper {
public String determineType(String expression, Map variableTypes) {
... // How do I implement this?
}
}
public void ExpressionTyperTest {
@Test public void determineType() {
assertEquals("int", ExpressionTyper.determineType("1 + 1", emptyMap());
assertEquals("long", ExpressionTyper.determineType("1 + 1L", emptyMap());
assertEquals("double", ExpressionTyper.determineType("1 + 1.5", emptyMap());
assertEquals("int", ExpressionTyper.determineType("a + 1", mapOf({"a", "int"}));
assertEquals("int", ExpressionTyper.determineType("a + b", mapOf({"a", "int"}, {"b", "int"}));
assertEquals("double", ExpressionTyper.determineType("a + b", mapOf({"a", "double"}, {"b", "int"}));
}
}