在运行时确定字符串中Java表达式的返回类型

杰弗里·德·斯密特

在运行时,在我的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<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

其他选项将遵循某些“编译器构造”主题,例如“不断折叠”

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在运行时评估groovy字符串表达式

来自分类Dev

正则表达式查找运行时确定的任意字符串

来自分类Dev

`symbolVal` 中的错误类型在运行时获取类型级字符串

来自分类Dev

如何在运行时将java中的字符串参数作为参数传递

来自分类Dev

如何在运行时将java中的字符串参数作为参数传递

来自分类Dev

如何在运行时创建表达式

来自分类Dev

如何在运行时创建表达式

来自分类Dev

在运行时修改表达式

来自分类Dev

自动将字符串解析为目标基本类型的方式(在运行时)

来自分类Dev

在运行时使用连接字符串

来自分类Dev

PyQt:在运行时转换模块字符串

来自分类Dev

尝试在运行时编辑字符串

来自分类Dev

Dapper 在运行时更改连接字符串

来自分类Dev

返回字符串中的Java正则表达式特殊字符

来自分类Dev

运行时错误“ 3464”:条件表达式中的数据类型不匹配

来自分类Dev

为什么在Java中使用正则表达式会在运行时抛出“未封闭的字符类”异常?

来自分类Dev

Kotlin正则表达式不适用于我在运行时得到的波兰字符(“ł”)

来自分类Dev

字符串替换在运行时在Powershell脚本中不起作用

来自分类Dev

如何在运行时在Objective-C中查找字符串常量?

来自分类Dev

在Swift中可以在运行时从字符串执行代码吗?

来自分类Dev

在EF 6中在运行时更改连接字符串

来自分类Dev

如何在运行时在EF7 Core中更改连接字符串?

来自分类Dev

是否可以在运行时为C中的字符串分配正确的空间量?

来自分类Dev

如何在Java中返回与正则表达式匹配的字符串

来自分类Dev

蒲公英运行时表达式

来自分类Dev

如何在运行时创建表达式以在Entity Framework中与GroupBy()一起使用?

来自分类Dev

在大豆(封闭式)模板中,如何打印在运行时可能未定义的表达式?

来自分类Dev

字符串中的Java正则表达式

来自分类Dev

在运行时确定或访问类型变量的具体类型

Related 相关文章

  1. 1

    在运行时评估groovy字符串表达式

  2. 2

    正则表达式查找运行时确定的任意字符串

  3. 3

    `symbolVal` 中的错误类型在运行时获取类型级字符串

  4. 4

    如何在运行时将java中的字符串参数作为参数传递

  5. 5

    如何在运行时将java中的字符串参数作为参数传递

  6. 6

    如何在运行时创建表达式

  7. 7

    如何在运行时创建表达式

  8. 8

    在运行时修改表达式

  9. 9

    自动将字符串解析为目标基本类型的方式(在运行时)

  10. 10

    在运行时使用连接字符串

  11. 11

    PyQt:在运行时转换模块字符串

  12. 12

    尝试在运行时编辑字符串

  13. 13

    Dapper 在运行时更改连接字符串

  14. 14

    返回字符串中的Java正则表达式特殊字符

  15. 15

    运行时错误“ 3464”:条件表达式中的数据类型不匹配

  16. 16

    为什么在Java中使用正则表达式会在运行时抛出“未封闭的字符类”异常?

  17. 17

    Kotlin正则表达式不适用于我在运行时得到的波兰字符(“ł”)

  18. 18

    字符串替换在运行时在Powershell脚本中不起作用

  19. 19

    如何在运行时在Objective-C中查找字符串常量?

  20. 20

    在Swift中可以在运行时从字符串执行代码吗?

  21. 21

    在EF 6中在运行时更改连接字符串

  22. 22

    如何在运行时在EF7 Core中更改连接字符串?

  23. 23

    是否可以在运行时为C中的字符串分配正确的空间量?

  24. 24

    如何在Java中返回与正则表达式匹配的字符串

  25. 25

    蒲公英运行时表达式

  26. 26

    如何在运行时创建表达式以在Entity Framework中与GroupBy()一起使用?

  27. 27

    在大豆(封闭式)模板中,如何打印在运行时可能未定义的表达式?

  28. 28

    字符串中的Java正则表达式

  29. 29

    在运行时确定或访问类型变量的具体类型

热门标签

归档