当前位置: 首页 > 知识库问答 >
问题:

用石膏和羊绒收集

段干楚青
2023-03-14

我在Java8中遇到了一个问题,在使用cast时,它不允许我收集对象。

definitions.stream()
           .map(Definition.class::cast)
           .map((Definition definition) -> { 
               WonderfulDefinition wd = new WonderfulDefinition();
               wd.name(definition.getName());
               //etc
               return wd;
           }).collect(Collectors.toList())

我得到了编译器错误:

错误:(71,23)java:不兼容类型:推理变量T的边界不兼容等式约束:java。util。列出下限:java。lang.反对

任何帮助都将不胜感激。

更新:

import java.util.*;
import java.util.stream.*;

class Driver {
    public static void main(String[] args) {
        List definitions = new ArrayList<>();
        definitions.add(new Definition());
        definitions.add(new Definition());

        List<WonderfulDefinition> list =
                definitions.stream()
                        .map(Definition.class::cast)
                        .map((Definition definition) -> {
                            WonderfulDefinition wd = new WonderfulDefinition();
                            wd.name(definition.getName());
                            //etc
                            return wd;
                        }).collect(Collectors.toList());

        System.out.println(list);
    }
}
class Definition {
    private String name;

    public String getName() {
        return name;
    }
    public void name(String name) {
        this.name = name;
    }
}
class WonderfulDefinition extends Definition {
}

共有1个答案

裴星洲
2023-03-14

问题是你的列表没有类型。在这种情况下,只需通过执行强制转换来提示编译器:

((List<Object>) definitions).stream()
      .map(Definition.class::cast)
      .map(definition -> {
          WonderfulDefinition wd = new WonderfulDefinition();
          wd.name(definition.getName());
          //etc
          return wd;
      }).collect(Collectors.toList());

请记住,这样的说法是完全正确的:

List definitions = Arrays.asList(new Definition());
List<Object> d = definitions;
 类似资料:
  • 这里是Java初学者。代码如下: Netbean告诉我这是一个未经检查的强制转换。谷歌告诉我,我应该尽量避免这个警告,而不是压制它,那么我该如何去做呢?这个程序应该读取的唯一文件确实包含一个ArrayList,如果没有,我可以只捕获这些异常。 此外,如果我对char[][](从和OIS中读取并尝试转换)执行相同的操作,netbeans不会有任何问题。为什么会这样?我认为这仍然是一个未经检查的演员阵

  • 我在这里发布了一个答案,其中演示使用< code>ConcurrentMap的< code>putIfAbsent方法的代码如下: 这种方法的主要缺点是您必须创建一个新对象来放入地图中,无论它是否会被使用。如果对象很重,这可能会产生重大影响。 我想到这将是一个使用Lambdas的机会。我还没有下载Java 8 n,或者在它成为官方(公司政策)之前我可以下载,所以我无法测试它,但这样的东西是否有效?

  • 温馨提示:该项目已开源,用户在项目基础上的所有操作、修改须进行标记,并保留原项目版权说明。 羊驼!羊驼!前方惊现羊驼 ! 羊驼! 是一个开源的轻量级树状 CMS 系统。它基于 php + mysql 开发,并使用 b2core  为底层MVC架构。 可以方便快速的配置出个人、企业网站。 如果你是打算开发一个内容网站,或者是开发一款基于PHP的应用,羊驼!CMS 都会是个不错的开始,它可以帮你节省构

  • 所以我有一个技术挑战我需要帮助。 一个大型项目正在使用Quartz调度程序调度一个作业,使其在每晚9点运行。 然而,调度的作业需要从属性文件中读取值,使用自动布线获取一些bean等。 当我使用@autowired和@value注释时,我发现这些值为空。 问题是Quartz在spring容器外部使用创建JobDetail对象。可以在下面的代码中看到。 因此,包装的对象无法使用Spring访问属性文件

  • 问题内容: 有没有办法将石英作为基础调度程序? 我可以想到两件事,但都需要做一些工作: 创建一个将解析注解并注册石英作业的自定义 实施委托石英的工具。 问题是:以上两个选项是否已经编写过,是否还有另一个选项? 问题答案: 我最终制作了自己的弹簧石英“桥”。我打算建议将其作为春季的改进。 首先,我创建了一个新注释,该注释将放置在实现quartz Job接口的类上: (请注意原型作用域-石英假定每个作

  • 谢谢你的帮助!