用Java转换为可扩展类的通用类

时间:2019-05-15 12:43:08

标签: java

我在用Java进行转换时遇到一些麻烦。此方法过去接受:

ArrayList<? extends Class<? extends ReferenceSource>> sortedSourceClasses

但这现在是BaseReferenceSource。因此,现在它可以是扩展BaseReferenceSource或扩展BaseReferenceSource和ReferenceSource的列表。所以我的想法是遍历列表并检查每个元素。之前,此操作由现在已注释掉的行中的所有元素完成。

现在我需要先检查每个元素。但是,当它基本上是从类扩展的泛型列表时,我不知道如何正确地进行转换。我的解决方案不起作用,因为getReferencedBy需要某种类型的东西: "Class<? extends ReferenceSource>"

private Set<Reference> getAllReferencedBy(ReferenceTarget target,
                                          Set<LinkType> targetTypes,
                                          ArrayList<? extends Class<? extends BaseReferenceSource>> sortedSourceClasses,
                                          int limitPerType) {
    Set<Reference> uglyUnion = new HashSet<Reference>();
    if (targetTypes != null && !targetTypes.isEmpty())
    {
        // NEW CODE - NOT WORKING
        Iterator i = sortedSourceClasses.iterator();
        while (i.hasNext()) {
            Object o = i.hasNext();
            if (o instanceof ReferenceSource)
            {
                ReferenceSource r = (ReferenceSource)o; // error
                uglyUnion.add(target.getReferencedBy(LinksMode.ALL, r, targetTypes, limitPerType));
            }
            else if (o instanceof BaseReferenceSource)
            {

            }
        }

        // OLD CODE - WORKING
        // for (Class<? extends ReferenceSource> aClass : sortedSourceClasses) {
        //  uglyUnion.addAll(target.getReferencedBy(LinksMode.ALL, aClass, targetTypes, limitPerType));
        //}
        return uglyUnion;
    }
}

getReferencedBy定义如下:

Set<Reference> getReferencedBy(LinksMode mode,
                               Class<? extends ReferenceSource> clazz,
                               Set<LinkType> linkTypes,
                               int limit);

0 个答案:

没有答案