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

推理变量K有不相容的边界

唐运诚
2023-03-14

正如斯图尔特·马克斯(Stuart Marks)指出的那样,我试图为这里所述的问题编写一个解决方案,以使用一个helper类。由于这个错误,我被代码卡住了:

Test.java:27: error: incompatible types: inference variable K has incompatible bounds                                                                                                                          
         .collect(Collectors.groupingBy(p -> p.getT2()));                                                                                                                                                      
                 ^                                                                                                                                                                                             
    equality constraints: Tuple                                                                                                                                                                                
    lower bounds: Integer                                                                                                                                                                                      
  where K,T are type-variables:                                                                                                                                                                                
    K extends Object declared in method <T,K>groupingBy(Function<? super T,? extends K>)                                                                                                                       
    T extends Object declared in method <T,K>groupingBy(Function<? super T,? extends K>) 

我当前的代码:

import java.util.stream.IntStream;
import java.util.stream.Collectors;
import java.util.Map;

public class Test{

    private static final class Tuple {
        private final Integer t1;
        private final Integer t2;

        private Tuple(final Integer t1, final Integer t2) {
            this.t1 = t1;
            this.t2 = t2;
        }

        public Integer getT1() { return t1; }
        public Integer getT2() { return t2; }
    }

     public static void main(String []args){
        System.out.println("Hello World");

        Map<Tuple, Integer> results =
        IntStream.range(1, 10).boxed()
         .map(p -> new Tuple(p, p % 2))                     // Expensive computation
         .filter(p -> p.getT2() != 0)
         .collect(Collectors.groupingBy(p -> p.getT2())); 

        results.forEach((k, v) -> System.out.println(k + "=" + v));
     }

}

我本人对Java 8很陌生,解决方案可能是错误的,但我不知道错误是什么意思,也不知道如何解决它。元组类过去也是泛型的,但因为我认为这导致了问题,我删除了泛型类型,但仍然存在相同的错误。

共有1个答案

司空锋
2023-03-14

collect()groupingBy()不要做你认为他们会做的事。你现在的作业结果类型是:

Map<Integer, List<Tuple>> results = ...

换言之,您是按p.getT2()Integer)分组的,在每个组中,将该组的元组收集到一个列表中

1=[Test$Tuple@7699a589, Test$Tuple@58372a00, Test$Tuple@4dd8dc3, 
   Test$Tuple@6d03e736, Test$Tuple@568db2f2]

 类似资料:
  • 错误:(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功能但我不知道如何解决这个错误

  • 任务是: 修改所有以字母表后半部分字母开头的工人的奖金。 我有这个错误 原因:推理变量T具有不兼容的边界 相等约束:RegWorker 下界:Float

  • 以下程序在Java7和Eclipse Mars RC2中编译Java8: 使用javac 1.8.0_45编译器,报告了以下编译错误: 解决方法是在本地分配一个变量: 我知道类型推断在Java8中发生了很大变化(例如,由于JEP 101“广义目标类型推断”)。那么,这是一个错误还是一个新的语言“功能”? 编辑:我也向Oracle报告了JI-9021550,但以防万一这是Java8中的一个“功能”,

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