Bra*_*one 6 java reflection java-8
我一直在用Java进行思考,遇到了一个相当难解决的问题。
仅给出方法的名称和的数组,Object如何找到该方法的最佳匹配重载?
我知道,在大多数情况下,只需检查参数列表的长度是否与数组的长度匹配,就可以快速排除许多重载。
接下来,我可以检查是否可以通过关联将数组的所有对象转换为期望的类型(我忘记了确切的方法名称,但是可以做到)。
但是,当多个方法与该过程匹配时,我遇到了一个问题。
假设我有以下两种方法:
public void doStuff(Collection<?> data) {
// Do stuff
}
public void doStuff(List<?> data) {
// Do stuff
}
Run Code Online (Sandbox Code Playgroud)
如果我要传递一个具有单个Set (或其子类型)对象的数组,则可以轻松排除第二个重载。因为Sets不是的子接口/子类型List。
ArrayList现在有了一个对象会很困难,因为an ArrayList既是a Collection 又是a List。
我知道如果我要使用常规代码,则编译器肯定会使用第二种方法,因为这是更好/更紧密的匹配。但是我该如何用反射做类似的事情?
我对各种解决方案都感兴趣,尽管我更喜欢使用JRE库,独立类或小型(单一用途)库的解决方案。
另外,我专门使用Java 8,尽管如果该语言的最新版本提供了更简单的方法来实现这一点,它们仍然非常受欢迎。