如何实现 java 插件库,您可以在其中通过签名搜索方法

How to implement a java plugin library where you can search methods by signature

面试时被问到这个问题,想不出好的解决办法。基本上,我必须实现一个 java 库,客户可以在其中注册方法,然后通过签名搜索方法。

下面是函数class --

class Function {
  public final List<String> argumentTypes; // e.g. ["Integer", "String", "PersonClass"]
  public final String name;

  Function(String name, List<String> argumentTypes) {
    this.name = name;
    this.argumentTypes = argumentTypes;
  }

  public String toString() {
    return this.name;
  }
}

以上class无法更改。然后我有了这个框架代码 --

 class FunctionLibrary {
     void register(Set<Function> functions) {
      
      }
      List<Function> findMatches(List<String> argumentTypes) {
    
        return null;
      }
}








    
    
         

findMatches 和 register 方法的实现应该是什么?

register 获取一组函数并将它们添加到集合中? 我认为这可以在每个函数的 O(1) 中完成。

为集合中的每个函数创建一个 HashMap<String, List<Function>> 并在 register() 方法中,通过创建一个连接参数并添加下划线的新字符串,根据其参数将其添加到映射中的适当列表例如,它们之间的地图将是:“int_string_long” -> [F1, F2...]

然后在 findMatches() 中简单地将参数中的字符串与它们之间的下划线连接起来,并从映射中“获取”该键是否存在。每次搜索也是 O(1)。

我现在找到工作了吗? :)