gpt4 book ai didi

Java 泛型无法识别类型?

转载 作者:行者123 更新时间:2023-11-30 06:02:38 29 4
gpt4 key购买 nike

我有课Node用作 DoublyLinkedNode 的抽象类和FibonacciNode .

package com.benjamin;

abstract class Node<N, T extends Comparable<T>> {
private N prev;
private N next;
private T data;

public N getPrev() { return prev; }
public N getNext() { return next; }
public T getData() { return data; }

public void setPrev(N prev) { this.prev = prev; }
public void setNext(N next) { this.next = next; }
public void setData(T data) { this.data = data; }
}

DoublyLinkedNodeFibonacciNode扩展此类作为为两种实现提供通用方法的一种方式。

我的问题是java似乎无法识别N的类型作为DoublyLinkedList当我传递它时。

package com.benjamin;

public class DoublyLinkedNode<T extends Comparable<T>> extends Node<DoublyLinkedNode<T>, T>{
DoublyLinkedNode() {
setPrev(this);
setNext(this);
setData(null);
}

DoublyLinkedNode(T data) {
setData(data);
}

@Override
public String toString() {
if(getData() != null) {
return "| " + getData().toString() + " |";
}
else {
return "| ; |";
}
}
}

在我的DoublyLinkedList类我得到一个错误说 unable to resolve method setPrev()在很多地方我得到 required: DoublyLinkedList got: Object

在我决定统一 Node 的实现之前,这段代码一直运行良好。

最佳答案

似乎期望让 ANode.getNext()ANode.getPrev() 严格返回 ANode 类型的实例(而不是 BNodeCNode 等类型)。如果是,则以下内容将起作用:

abstract class Node<N extends Node<N, T>, T extends Comparable<T>> {}

class ANode<T extends Comparable<T>> extends Node<ANode<T>, T> {}
class BNode<T extends Comparable<T>> extends Node<BNode<T>, T> {}
class CNode<T extends Comparable<T>> extends Node<CNode<T>, T> {}
<小时/>

但是,正如 this comment 中指出的那样,这种设计会带来以下问题:

class DNode<T extends Comparable<T>> extends ANode<T> {}
class ENode<T extends Comparable<T>> extends ANode<T> {}

在这些情况下,DNode/ENode.getNext()/getPrev() 将返回 ANode 实例,因为类型约束已由父类设置。

关于Java 泛型无法识别类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51982150/

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