当前位置: 首页 > 面试题库 >

如何将字符串映射到Java中的函数?

邹正阳
2023-03-14
问题内容

当前,我有一堆实现Processor接口的Java类,这意味着它们都具有processRequest(String key)方法。这个想法是,每个类都有几个(例如<10)成员Strings,并且每个类都通过processRequest方法映射到该类中的方法,如下所示:

class FooProcessor implements Processor
{
    String key1 = "abc";
    String key2 = "def";
    String key3 = "ghi";
    // and so on...

    String processRequest(String key)
    {
        String toReturn = null;
        if (key1.equals(key)) toReturn = method1();
        else if (key2.equals(key)) toReturn = method2();
        else if (key3.equals(key)) toReturn = method3();
        // and so on...

        return toReturn;
    }

    String method1() { // do stuff }
    String method2() { // do other stuff }
    String method3() { // do other other stuff }
    // and so on...
}

你明白了。

这对我来说很好,但是现在我需要一个从键到函数的运行时可访问的映射。并非每个函数 实际上都
返回一个String(有些返回void),并且我需要动态地访问每个具有键的类中每个函数的返回类型(使用反射)。我已经有一位经理,他了解所有键,但是
知道从键到功能的映射。

我的第一个直觉是用if-else语句代替此映射Map<String, Function>,就像我在Javascript中所做的那样。但是,Java不支持一流的功能,因此我很不走运。我可能会挖掘出一个第三方库,该库可以让我使用一流的功能,但是还没有看到,我怀疑是否需要一个全新的库。

我还考虑过将这些String键放入数组中并使用反射按名称调用方法,但是我看到此方法有两个缺点:

  • 我的键必须与方法命名相同-或以特定的一致方式命名,以便轻松将它们映射到方法名称。
  • 这似乎比if-else我现在的陈述要慢。效率是一个令人担忧的问题,因为这些方法将经常被频繁调用,并且我想将不必要的开销降至最低。

TL;
DR:
我正在寻找一种干净的,开销最小的方法来将a映射StringFunction我可以调用和调用(类似)的某种对象getReturnType()。如果
真正 适合我的需求,我不介意使用第三方库。我也不介意使用反射,尽管我强烈希望避免每次执行方法查找时都使用反射-
也许使用结合了Map反射和的某种缓存策略。

对获得我想要的好方法的想法?干杯!


问题答案:

你难道不能StringMethod?然后,您可以缓存需要执行的方法。



 类似资料:
  • 问题内容: 当我用Java进行操作时,我在stdout中得到了很好的输出。在不干预标准输出的情况下,如何在变量中获得相同的a字符串表示形式?像什么? 问题答案: 使用。 所有的亦是在此之后是做头套下。地图的格式在中描述。 返回此映射的字符串表示形式。字符串表示形式由键值映射列表组成,这些键值映射由地图视图的迭代器返回,并用大括号(“ {}”)括起来。相邻的映射用字符“,”(逗号和空格)分隔。每个键

  • 我有下面的结构,我想用MapStruct映射这个。 下面是mapstruct为toDTO方法生成的实现 下面是mapstruct为toEntity方法生成的实现 我的问题是方法只在文本不为空时设置注释。但是方法不检查空文本或空文本。因此,如果我在DTO中获得,它将创建一个新的comment对象并将文本设置为null。如何避免这一点?有人能解释一下这种行为并建议我正确的做法吗?谢了!

  • 问题内容: 例如 输入:[‘A’,’Z’,’F’,’D’,…] 输出:[0,25,5,3,…] 在C语言中,我只是从’A’中减去char,但是我似乎无法在Java中做到这一点。 问题答案: 您也可以在Java中使用char进行简单的数学运算: 将输出0。

  • 嗨,我尝试将以下Source类映射到以下Destation类。我使用了以下映射以将字符串值映射到列表字符串。它没有正确映射。我需要知道如何使用Dozer将2个字符串值映射到一个目标字符串列表中。

  • 我正在编写一个小型2D游戏,目前正在为其添加脚本功能(使用Lua或Python),而我在这个问题上磕磕绊绊(我认为这将导致我为我的游戏实现某种反射系统): 我使用的是Entity Component System模式,实体的定义是由脚本(Lua表或Python dict)提供的,因此每当我想构造实体时,我都会运行该脚本: 等等。在EntityFactory中,我有一个EntityFactoryFu

  • 我想做一个函数,将字符串添加到字符串中 我这样尝试过: 主要功能 在addLine(字符串文本,字符串行) 我知道=在java中的String make new实例之间的操作。但是,上层代码不起作用。 我如何制作一个向字符串添加字符串的函数?