泛型和比较器

Jok*_*ker 3 java generics

我正在努力generics,发现以下代码给出了编译时错误comparing method.

此行的多个标记 - 无法推断用于比较的类型参数(功能) - 类型A未定义适用于此处的m1(对象)

 class A<T> {
    String m1() {
        return null;
    }
}

class B {
    void test() {
        Comparator<A<String>> target = Comparator.comparing(A::m1).thenComparing(A::m1);
    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我理解这种行为; 我该如何解决这个问题呢?

Mar*_*nko 7

如果在comparing方法中指定了确切的泛型类型,则代码将进行编译.

Comparator<A<String>> target =
    Comparator.<A<String>, String>comparing(A::m1).thenComparing(A::m1);
Run Code Online (Sandbox Code Playgroud)


sak*_*029 6

您应该为A类指定类型参数.

Comparator<A<String>> target = Comparator.comparing(A<String>::m1).thenComparing(A<String>::m1);
Run Code Online (Sandbox Code Playgroud)