首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一般情况下轻工业中的不良报酬率型

一般情况下轻工业中的不良报酬率型
EN

Stack Overflow用户
提问于 2017-11-24 10:55:02
回答 1查看 956关注 0票数 1

具有此泛型代码

代码语言:javascript
运行
复制
static final <T> List<Class<? extends T>> findSubClasses(Class<T> clz, String packageName){
    ClassPathScanningCandidateComponentProvider provider =
                new ClassPathScanningCandidateComponentProvider(false);
    provider.addIncludeFilter(new AssignableTypeFilter(clz));
    Set<BeanDefinition> beanDefinitions = provider.findCandidateComponents(packageName);
    List<Class<? extends T>> subClasses = beanDefinitions.stream().map(b->mapToClass(b, clz)).collect(Collectors.toList());
        return subClasses;
}

private static final <T> Class<? extends T> mapToClass(BeanDefinition beanDefinition, Class<T> clz) {
   String className = beanDefinition.getBeanClassName();
   try {
       return (Class<? extends T>) Class.forName(className);
   } catch (ClassNotFoundException e) {
       log.error("Failed to load the scanned class {}", className, e);
   }
   return null;
}

我在b->mapToClass(b, clz)上有一条错误消息

代码语言:javascript
运行
复制
Bad return type in lambda expression: Class<capture of ? extends T> cannot be converted to Class<Object>

怎么解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2017-11-24 11:38:33

您向这些方法提供的泛型信息是不相关的,即使您给它们取了相同的名称(T)。如果您想使它们有某种程度的关联,则需要在类级别上声明它们。

但在这种情况下,它将无法工作,因为您的方法是static;因此,例如:

代码语言:javascript
运行
复制
 public class YourClass<T> {

    final List<Class<? extends T>> findSubClasses(Class<T> clz, String packageName) {
        ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false);
        provider.addIncludeFilter(new AssignableTypeFilter(clz));
        Set<BeanDefinition> beanDefinitions = provider.findCandidateComponents(packageName);
        List<Class<? extends T>> subClasses = beanDefinitions.stream().map(b -> mapToClass(b, clz))
                .collect(Collectors.toList());
        return subClasses;
    }

    private final Class<? extends T> mapToClass(BeanDefinition beanDefinition, Class<T> clz) {
        String className = beanDefinition.getBeanClassName();
        try {
            return (Class<? extends T>) Class.forName(className);
        } catch (ClassNotFoundException e) {

        }
        return null;
    }
}

编辑

实际上,作为Didier's points outjavac-8javac-9可以很好地工作,因此根本不需要进行任何重构.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47471761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档