Java 重新映射数组列表值-从子类型到超级(sonar qube)

Java 重新映射数组列表值-从子类型到超级(sonar qube),java,Java,Bar扩展了Foo,我需要基于Bar列表返回Foo列表 以下代码工作: private static List<Foo> getList(List<Bar> list) { return list.stream() .map((Bar e) -> (Foo) e) .collect(Collectors.toList()); } 但我发现声纳错误: contrib:FII\u USE\

Bar扩展了Foo,我需要基于Bar列表返回Foo列表

以下代码工作:

private static List<Foo> getList(List<Bar> list) {
       return list.stream()
               .map((Bar e) -> (Foo) e)
               .collect(Collectors.toList());
   }
但我发现声纳错误:

contrib:FII\u USE\u FUNCTION\u IDENTITY此方法声明一个no op 标识lambda方法,而不仅仅是指定 功能、身份

我不理解声纳的信息,因为它实际上不是禁止操作

有没有办法以更优雅的方式实现这种声纳兼容?
只需避免显式类型转换并在类上使用方法

也许您可以通过使用instanceof来避免异常


只需避免显式类型转换并在类上使用方法

也许您可以通过使用instanceof来避免异常


就是要求你做这样的事

list.stream().map(Function.identity()).collect(Collectors.toList());
功能。身份代码:

static <T> Function<T, T> identity() {
        return t -> t;
    }

从子类到超类的转换称为上转换。 通常,向上转换由编译器隐式执行。 向上转换与继承密切相关,这是继承的另一个核心概念 JAVA通常使用引用变量来引用更多的 特定类型


阅读更多

它要求你做这样的事情

list.stream().map(Function.identity()).collect(Collectors.toList());
功能。身份代码:

static <T> Function<T, T> identity() {
        return t -> t;
    }

从子类到超类的转换称为上转换。 通常,向上转换由编译器隐式执行。 向上转换与继承密切相关,这是继承的另一个核心概念 JAVA通常使用引用变量来引用更多的 特定类型


阅读更多内容似乎最简单的方法就是通过

private static List<Foo> getList(List<Bar> list) {
       return new ArrayList<>(list);
   }
这使得整个功能都是多余的

我只是使用它作为列表愚人=新数组列表;需要的时候

声纳对这种方法没有异议。不过,看看这些方法的性能会很有趣


@user3487063的回答非常有用,揭示隐含的向上投射机制似乎是最简单的方法,通过

private static List<Foo> getList(List<Bar> list) {
       return new ArrayList<>(list);
   }
这使得整个功能都是多余的

我只是使用它作为列表愚人=新数组列表;需要的时候

声纳对这种方法没有异议。不过,看看这些方法的性能会很有趣


@user3487063的回答很有帮助,揭示了隐含的向上转换机制

旁注:因为map需要函数旁注:因为map需要函数,所以他想将Bar转换为Foo。一个接受T并返回T的方法在这里是如何帮助的?从子类到超类的转换称为上转换。通常,向上转换由编译器隐式执行。向上转换与继承密切相关,继承是Java中的另一个核心概念。使用引用变量引用更具体的类型是很常见的。@GhostCat说Restore Monica,向上转换是由编译器隐式执行的。嘿@user3487063这听起来不错,我还没有在Sonar上运行它,但它实现了相同的目标。唯一的一件事是Intelij说它是多余的,所以将其折叠并遵循Intelij的进一步建议,我最终得到了return new ArrayList,这使得整个函数变得不必要:他想将Bar转换为Foo。一个接受T并返回T的方法在这里是如何帮助的?从子类到超类的转换称为上转换。通常,向上转换由编译器隐式执行。向上转换与继承密切相关,继承是Java中的另一个核心概念。使用引用变量引用更具体的类型是很常见的。@GhostCat说Restore Monica,向上转换是由编译器隐式执行的。嘿@user3487063这听起来不错,我还没有在Sonar上运行它,但它实现了相同的目标。唯一的一点是Intelij说它是冗余的,所以将其折叠并遵循Intelij的进一步建议,我最终得到了return new ArrayListlist,这使得整个函数变得不必要:谢谢,Intellij建议使用.filterObjects::nonNull进一步简化它,上面说的是相同的。请看我在上面对user3487063的评论,似乎我可以返回新的ArrayListlist,但我需要通过Sonar yetsorry传递所有这些方法。我没有收到您的问题@NenadpThank,Intellij建议使用。filterObjects::nonNull对此进行进一步简化。上面的说明是一样的。请看我在上面对用户3487063的评论,似乎我可以返回新的ArrayList,但我需要通过Sonar yetsorry传递所有这些方法。我没有收到你的问题@nenapp