我在用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);