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

推理变量在使用时具有不兼容的边界。collect(toList())

鲁光霁
2023-03-14

任务是:

修改所有以字母表后半部分字母开头的工人的奖金。

class Worker that extends Employee
{
    public Worker(String name, int yOfEmp, int salary, Manager boss){
        super(name, yOfEmp, salary,boss);
        boss.addEmployee(this);
    }

    public float getBonus(Employee emp){
        Random rand = new Random();
        float proc = rand.nextFloat();
        return emp.getSalary() * proc;
    }
    public float setBonus(Employee e, float proc){
        float newProc = proc;
        return e.getSalary() * proc;
    }

    @Override
    public String toString() {
        return super.toString();
    }
}
class RegWorker extends Worker
{
}
class Main
{
  public static void main(String[] str) {
    Manager bill = new Manager("Bill", 2010, 2549, null);
    Manager steven = new Manager("Steven", 2011, 2100, bill);
    Trainer jerry = new Trainer("Jerry", 2014, 800, steven);
    RegWorker john = new RegWorker("John", 2010, 1000, bill);
    RegWorker kate = new RegWorker("Kate", 2011, 1000, bill);
    RegWorker sam = new RegWorker("Sam", 2013, 1200, steven);

    final List<Worker> workers = Arrays.asList(jerry, john, kate, sam);

    System.out.println("Modify bonuses for all regular workers:");
    RegWorker reg = null;

    List<RegWorker> regWorkers = workers
                .stream()
                .filter(w -> w.getClass() == reg.getClass())
                .filter(w -> w.getName().charAt(0) < 'O')
                .map(w -> w.setBonus(w, w.getBonus(w)+3))
                .collect(toList());
    }

我有这个错误

原因:推理变量T具有不兼容的边界
相等约束:RegWorker
下界:Float

共有1个答案

沈凡
2023-03-14

在执行map时,将流对象替换为mapper函数返回值,该值是setBonus的返回值,即float。所以在map步骤之后,您没有

似乎您想使用peek而不是map。此外,您还需要将流元素强制转换为RegWorker类,因为原始流是stream

List<RegWorker> regWorkers = workers
            .stream()
            .filter(w -> w instanceof RegWorker)
            .filter(w -> w.getName().charAt(0) < 'O')
            .map(w -> (RegWorker)w)
            .peek(w -> w.setBonus(w, w.getBonus(w)+3))
            .collect(toList());

 类似资料:
  • 错误:(65,52)java:不兼容类型:推理变量U的边界不兼容等式约束:akka。http。javadsl。模型HttpResponse下限:com。我的演员。聊天演员。聊天信息 下面这行代码显示了错误: 这里是HttpResponse是Akka Http的。 我不知道它在说什么。解决它的方法应该是什么?

  • JDK 1.8 设置和收集。 我想数一数那个十字路口 我试试这个: 但我有一个错误:

  • 我有以下代码 出于某种原因,它抛出了以下编译错误 Solution.java:11:错误:不兼容类型:推断变量T具有不兼容的边界List=Arrays.asList(A);^相等约束:整数下界:int[]其中T是类型变量:T扩展方法中声明的Object asList(T...) 我假设这是一个Java8功能但我不知道如何解决这个错误

  • 正如斯图尔特·马克斯(Stuart Marks)指出的那样,我试图为这里所述的问题编写一个解决方案,以使用一个helper类。由于这个错误,我被代码卡住了: 我当前的代码: 我本人对Java 8很陌生,解决方案可能是错误的,但我不知道错误是什么意思,也不知道如何解决它。元组类过去也是泛型的,但因为我认为这导致了问题,我删除了泛型类型,但仍然存在相同的错误。

  • 我已经复习了“可能相关”的问题,但它们似乎没有帮助;我也是一个初学者,尤其是Java8,所以请耐心听我说! 问题是,我想将一个包含值列表的文件(在本例中是双数字)读入一个数组。我在助手类中作为方法来做这些,因为我希望在我的项目中需要多次这样做。 我已经创建了一个将文件转换为二维双数组的简单方法- 这很有效,我一直在成功地使用它。然后我想尝试将一个包含一长串大数字的文件读入一个1D数组,所以尝试快速

  • 这是我的分类程序类,我试图在其中实现一些算法。 但是,在编译时,我得到了以下错误: 必需:AbstractList found:ArrayList原因:推理变量T具有不兼容的边界等式约束:ShipDetail上限:Comparable,其中T是类型变量:T扩展了方法QuickSort(AbstractList)中声明的Comparable