如何实现 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)。
我现在找到工作了吗? :)
面试时被问到这个问题,想不出好的解决办法。基本上,我必须实现一个 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)。
我现在找到工作了吗? :)