gpt4 book ai didi

类函数内部的Java泛型重新定义

转载 作者:行者123 更新时间:2023-11-30 06:17:00 25 4
gpt4 key购买 nike

我有一个类,旨在实现一个泛型堆,但我在使用泛型时遇到了问题。类定义是 public class BinHeap <T extends Comparable<? super T>> {

在类中,我有一个函数可以从堆中删除最小值(由于我遇到的错误,它尚未完成)。

public <T extends Comparable<? super T>> T deleteMin() {
T returnVal = (T)arr[0];
T temp = (T)arr[num-1];
num--;
int hole = 0;
int ret = -1;
int newhole = newHole(hole,temp);

return null;
}

这个函数调用了这里定义的newHole

private int newHole(int hole, T item) {
int ret = -1;
if(1+(hole*2) < num+1) {
if(2+(hole*2) == num+1) {
if(arr[1+(hole*2)].compareTo(item) == -1) {
ret = 1+(hole*2);
}
}
else {
int smallerChild;
int smaller = arr[1+(hole*2)].compareTo(arr[2+(hole*2)]);
if(smaller == -1) {
smallerChild = 1+(hole*2);
}
else {
smallerChild = 2+(hole*2);
}
if(arr[smallerChild].compareTo(arr[hole]) == -1) {
ret = smallerChild;
}
}
}
return ret;
}

当我测试编译时,出现以下错误

BinHeap.java:51: error: method newHole in class BinHeap<T#1> cannot be applied to given types;
int newhole = newHole(hole,temp);
^
required: int,T#1
found: int,T#2
reason: actual argument T#2 cannot be converted to T#1 by method invocation conversion
where T#1,T#2 are type-variables:
T#1 extends Comparable<? super T#1> declared in class BinHeap
T#2 extends Comparable<? super T#2> declared in method <T#2>deleteMin()

虽然我确实理解编译器告诉我的内容,但我不知道如何解决这个问题。我怎样才能制作 T temp = (T)arr[num-1];是正确的通用类型吗?

最佳答案

只在类上定义T。目前,您在方法上定义了第二个 T,它隐藏了类上的 T。你可以在方法中直接引用T,当你去掉T在方法上的重新定义。

public T deleteMin() {  // T is already in scope

关于类函数内部的Java泛型重新定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26411541/

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