gpt4 book ai didi

将参数传递给采用 T 的方法的 Java 错误,其中 T 扩展了 Comparable

转载 作者:行者123 更新时间:2023-11-30 10:33:47 24 4
gpt4 key购买 nike

我有以下类声明:

public class UserVariable<T extends Comparable<T>> implements Comparable<UserVariable<T>>
{
private T myValue;

public void setValue(T value)
{
myValue = value;
}

public T getValue()
{
return myValue;
}

public int compareTo(UserVariable<T> rhs)
{
return getValue().compareTo(rhs.getValue());

}
}

如果我做对了,我想要的是:UserVariable可以与其他UserVariable相比s 并且它是通用的并且接受类型 T可以与其他 T 相比

我无法调用 setValue()并传递给它一个整数:

UserVariable<Integer> newVar = new UserVariable<Integer>();
newVar.setValue(new Integer(20));

给我错误“setValue(Comparable<Comparable<T>>) 类型的方法 UserVariable<Comparable<Comparable<T>>> 不适用于参数 ( Integer )”。

我不明白为什么会出现此错误。一、Integer执行Comparable<Integer> .第二,为什么Comparable在错误消息中以嵌套方式 (Comparable<Comparable<T>>) 出现两次?是的,UserVariable还实现了 Comparable但错误是指方法参数的类型,它是 T 类型, 这应该只是一个 T extends Comparable<T> ,对吧?

更新:

我意识到问题与我从通配符集合中检索对象这一事实有关:

Map<String, UserVariable<?>> myVars = new HashMap<>();

UserVariable<Double> v1 = new UserVariable<>();
v1.setValue(3.0);

myVars.put("doubleVar", v1);

myVars.get("doubleVar").setValue(new Double(30));

添加上面的代码会重现最后一行的编译错误。

抱歉,我担心问题范围已经随着最新信息而完全改变,因为我正在从 UserVariable<?> 类型的 map 中拉出一个对象并试图调用 setValue()

最佳答案

有两件事需要改变:

  • public class UserVariable<T extends Comparable<T>> implements Comparable<UserVariable<T>>

    在类声明中,您正在实现 Comparable<UserVariable<T>>其中 UserVariable本身再次实现 Comparable这就是为什么你得到 Comparable<Comparable<T>>在错误消息中。

  • public setValue(T value)

    不知道是不是打错了但是方法需要返回类型,可以改成public void setValue(T value)

下面是进行这些更改后有效的示例:

public class UserVariable<T extends Comparable<T>> implements Comparable<T> {

@Override
public int compareTo(T o) {
// TODO Auto-generated method stub
return 0;
}

private T myValue;

public void setValue(T value){
myValue = value;
}

public static void main(String[] args) {
UserVariable<Integer> newVar = new UserVariable<Integer>();
newVar.setValue(new Integer(20));
}
}

更新

如果你想比较两个UserVariable您只需要实现的对象 compareTo方法并添加 return type设置方法,下面应该工作:

public class UserVariable<T extends Comparable<T>> implements Comparable<UserVariable<T>> {
private T myValue;

public void setValue(T value) {
myValue = value;
}

public T getValue() {
return myValue;
}

public int compareTo(UserVariable<T> rhs) {
return getValue().compareTo(rhs.getValue());

}

public static void main(String[] args) {
UserVariable<Integer> newVar = new UserVariable<Integer>();
newVar.setValue(new Integer(20));
}
}

关于将参数传递给采用 T 的方法的 Java 错误,其中 T 扩展了 Comparable<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42032896/

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