gpt4 book ai didi

java - 在运行时确定 String 中 Java 表达式的返回类型

转载 作者:搜寻专家 更新时间:2023-11-01 01:32:21 28 4
gpt4 key购买 nike

在运行时,在我的 Java 程序中,给定一个字符串,我想知道返回类型。例如:

  • 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 是一个整数:a + 1.5 返回 double

不需要实际评估代码:我只需要返回类型。 我如何使用 JDK 运行时编译器、ECJ JDT 或任何其他纯 Java 依赖项执行此操作?


详细代码:这是此代码的简化伪代码单元测试:

public static void ExpressionTyper {
public String determineType(String expression, Map<String, String> 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"}));
}
}

最佳答案

我认为这取决于您希望能够处理的输入范围。

你看,最后你问的是:我如何在运行时评估字符串表达式。

因此,简短的回答是:您需要某种解释器/REPL 实现;或至少是其中的“部分”。

另一种方法可能是使用 javax 编译器来简单地编译东西,然后推断出类型,例如 here .

其他选项将遵循某些“编译器构造”主题的思路,例如 constant folding .

关于java - 在运行时确定 String 中 Java 表达式的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38218481/

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