gpt4 book ai didi

java - 遵守平等约束

转载 作者:行者123 更新时间:2023-12-01 19:57:52 25 4
gpt4 key购买 nike

我写了一些通用方法。它适用于一级后代。但对于第二级后代的对象,它会失败。

package com.company;

import java.util.ArrayList;
import java.util.List;

public class Main {

public static <T extends Comparable<T>> int f(List<T> list, T item) {
return 0;
}

static class A implements Comparable<A> {
@Override
public int compareTo(A o) {
return 0;
}
}

static class B extends A {
}

public static void main(String[] args) {
List<A> as = new ArrayList<A>();
List<B> bs = new ArrayList<B>();
A a = new A();
B b = new B();

f(as, a); // works
f(bs, b); // <-------- error
}
}

编译失败并显示:错误:(29, 9) java: com.company.Main 类中的方法 f 无法应用于

given types;
required: java.util.List<T>,T
found: java.util.List<com.company.Main.B>,com.company.Main.B
reason: inferred type does not conform to equality constraint(s)
inferred: com.company.Main.A
equality constraints(s): com.company.Main.A,com.company.Main.B

为什么Java无法猜测相等变量类型?

最佳答案

类型参数T您的职能f ,必须实现Comparable<T>根据你的定义<T extends Comparable<T>>B 没有实现 Comparable<B> ,而是Comparable<A> 。当您希望能够使用 B 调用该函数时,该类应该实现 Comparable<B> ,例如像这样

static class B extends A implements Comparable<B> {
@Override
public int compareTo(B o) {
return super.compareTo(o);
}
}

否则,您可以更改 f 的类型参数能够拥有T s 是 Comparable 的子类类。

public static <T extends Comparable<? super T>> int f(List<T> list, T item) {
return 0;
}

关于java - 遵守平等约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48851921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com