제네릭 타이핑을 사용하여 이진 트리를 만들려고하는데 이해가되지 않는 오류가 있습니다. 두 가지 코딩 방법을 시도하고 두 번째 방법이 효과가있었습니다. 나는 왜 처음이 실패했는지 이해하지 못한다.자바 - 제네릭 형식
나는 다음과 같은 공통 코드가이 작동 :
public class MyTreea <T extends Comparable<T>>
{
class BT_Node<T extends Comparable<T>>
{
T value;
BT_Node<T> left;
BT_Node<T> right;
BT_Node(T node_value)
{
this.value = node_value ;
left = null;
right = null;
}
}
의 차이는 삽입 절차에
private BT_Node<T> insert(BT_Node<T> node, BT_Node<T> newNode) {
if ((node.value).compareTo(newNode.value) == 0) { . . . }
을하지만이 함께
private BT_Node insert(BT_Node node, T value) {
if (value.compareTo(node.value) == 0) { . .
실패 :
를MyTreea.java:28: error: method compareTo in interface Comparable<T#2> cannot be applied to given types;
if (value.compareTo(node.value) == 0)
required: T#1
found: Comparable
reason: actual argument Comparable cannot be converted to T#1 by method invocation conversion
where T#1,T#2 are type-variables:
T#1 extends Comparable<T#1> declared in class MyTreea
T#2 extends Object declared in interface Comparable
분명히 두 노드 매개 변수가있는 BT_insert를 호출하면 문제가 없습니다. (그리고 나는 여분의 함수를 만들어서 그것을 처리하도록 코딩하고있다.)하지만 나는 그렇게하지 않는 편이 좋을 것이다.
감사
아마도 네임 스페이스와 Comparable 클래스를 포함하여 전체 파일을 게시 할 수 있습니까? – likeitlikeit