方法 unmodifiablelist() 不能应用于给定类型

我正在尝试编译一位前同事的代码,但它说该方法unmodifiableList()不能应用于给定类型。Eclipse 中的代码没有显示任何错误。但它仍然不让我编译它。可能是什么错误?


package framework.interview.demographics;


import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

import java.util.Objects;

import java.util.stream.Collectors;

import java.util.stream.Stream;

import org.apache.xmlbeans.impl.xb.xsdschema.Public;

import framework.data.people.NonReference;

import framework.data.people.people;


public class schedualData {


    private final List<people> schedual;


    private schedualData(List<people> schedual) {

            this.schedual = Objects.requireNonNull(schedual);

    }


    public static schedualData getSchedualData(List<people> schedual) {

        if(schedual.size() < 1)

            throw new IllegalArgumentException("schedual must   contain at least one people");


        if(Stream.of(schedual).filter(people -> (!(people instanceof NonReference))).count() != 1)

            throw new IllegalArgumentException("There must be one and only one Reference between"   + "People, number, and Review");


        return new schedualData(schedual);

    }


        //****** Getters ******\\

       public people getReference() {

          return schedual.stream()

         .filter(people -> !(people instanceof NonReference))

         .toArray(people[]::new)[0];

    }   


    public List<NonReference> getNonReferenceschedual() {

        //This is where the error is showing. 

        return Collections

               .unmodifiableList(schedual.stream()

               .filter(NonReference.class::isInstance)

               .map(x -> (NonReference) x)

               .collect(Collectors.toCollection     (ArrayList<NonReference>::new)));

      }


    public List<people> getFullschedual() {

        return Collections.unmodifiableList(schedual);

    }  


   public int size() {

       return schedual.size();

   }

}



阿波罗的战车
浏览 115回答 1
1回答

千巷猫影

您需要显式声明泛型类型参数。由于某种原因*,无法推断。return&nbsp;Collections.<NonReference>unmodifiableList(schedual.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.filter(NonReference.class::isInstance) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.map(NonReference.class::cast) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.toCollection(ArrayList::new)));或者return&nbsp;Collections.unmodifiableList(schedual.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.filter(NonReference.class::isInstance) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.map(NonReference.class::cast) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.<NonReference,&nbsp;List<NonReference>>toCollection(ArrayList::new)));或者ArrayList<NonReference>&nbsp;result&nbsp;=&nbsp;schedual.stream() &nbsp;&nbsp;&nbsp;&nbsp;.filter(NonReference.class::isInstance) &nbsp;&nbsp;&nbsp;&nbsp;.map(NonReference.class::cast) &nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.toCollection(ArrayList::new)); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Collections.unmodifiableList(result);虽然,你可以简单地去return&nbsp;Collections.unmodifiableList(schedual.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.filter(NonReference.class::isInstance) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.map(NonReference.class::cast) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.toList()));*问题在于,它Collections.unmodifiableList决定了 的类型collect(Collectors.toCollection()),而不是相反,正如您可能期望的那样。您可以通过准确说明您想要的内容来帮助编译器进行类型推断。你说要么unmodifiableList拿走什么,.collect(Collectors.toCollection())要么返回什么。上面提到的四个片段中的任何一个都可以帮助您解决问题。x -> (NonReference) x可以替换为NonReference.class::cast.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java