用于处理外部库版本中多种可能的集合类型的代码

时间:2014-10-28 23:12:01

标签: java collections

我遇到了我维护的插件的问题,因为在我们的应用程序的下一个版本中,我需要从插件中访问的集合将类型从Hashset更改为ArrayList。

我需要的是为我的插件添加一个jar,它可以访问主应用程序中的集合,无论版本/集合类型如何。

目前如果我针对V1编译我的插件(使用Hashset),插件将加载到V1和V2,但在尝试访问V2上的该集合时挂起

如果我针对V2(使用ArrayList)编译我的插件,插件将加载到V1和V2上,但在尝试访问V1上的该集合时挂起

我能够使用反射来解决这个问题。 我不确定它是最好还是最快的方法,但它现在似乎工作正常...

        List<MainPurpose> listOfMps = new ArrayList<MainPurpose>();
        try {

            Method getMps = cs.getContact().getClass().getMethod("getMainPurposes", (Class<?>[]) null);

            if (getMps.getReturnType().isAssignableFrom(Set.class)) {
                Set<MainPurpose> mps = (Set<MainPurpose>) getMps.invoke(cs.getContact(), (Object[]) null);
                listOfMps.addAll(mps);
            } else if (getMps.getReturnType().isAssignableFrom(List.class)) {
                List<MainPurpose> mps = (List<MainPurpose>) getMps.invoke(cs.getContact(), (Object[]) null);
                listOfMps.addAll(mps);
            }

        } catch (Exception e) {} 

0 个答案:

没有答案