2012-01-30 3 views
1

안녕하세요. 연결된 목록 데이터 형식을 쓰고 있습니다. 요소와 후계 노드를 저장하는 데 사용하는 내부 클래스 노드가 있습니다. 현재 내 노드의 getElement 및 내 목록의 get 메서드에 문제가 있습니다. 이 요소가 E 요소에 의해 선언 된 인스턴스 변수 노드반환시 제네릭은 어떻게 작동합니까?

public E getElement(){ 
    return this.element; 
} 

내 getElement입니다. 나는 그것을 반환하려고하지만 언제 도착 나는이 느낌이

public E get(int index){ 
    Node current; 
    if(index < 0 || index >= size) 
     throw new IndexOutOfBoundsException(); 
    if(index == 0) 
     return head.getElement(); 
    else{ 
     current = head; 
     for(int i = 0; i< index; i++){ 

     current = current.getSuccessor(); 
     } 
     return current.getElement(); 
    } 
    } 
나는 오류가 나는 주위 해킹과 E에 캐스팅 입력 할 수 있습니다 E.를 입력 개체에서 변환 할 수 없습니다 얻을

하지만 같은 방법 제네릭에 관한 몇 가지 근본적인 것이 제가 놓친 것입니다. 숙제 때문이라고 생각한다면 정확하고 미리 감사드립니다.

+2

나는 시간을 보았다 : 당신이 실제로 에게 그들을 필요로하는 지점)

Node<E>는 다음과 같이 보일 것이다 이 질문보다 훨씬 더 습지 문제에 대한 질문. –

+0

getElement는 무엇을 반환합니까? 객체? E 타입? – Adrian

+0

전체 수업 및 내부 수업을 게시 할 수 있습니까? – breezee

답변

9

당신은 아마 너무 일반적으로 Node을 원하는, 그래서 당신은 할 것

public E get(int index){ 
    if(index < 0 || index >= size) 
    throw new IndexOutOfBoundsException(); 

    Node<E> current = head; 
    for(int i = 0; i < index; i++) { 
    current = current.getSuccessor(); 
    } 
    return current.getElement(); 
} 

(I 동시에 약간의 코드를 단순화했습니다. 특히,이에 변수를 선언하는 것이 좋습니다 .

class Node<E> { 
    private final E element; 
    private Node<E> successor; 

    public Node(E element) { 
     this.element = element; 
    } 

    // etc 
} 
+1

Jon Skeet의 답변을 포기할 수는 없습니다. 하루 종일 투표를하지 못했기 때문입니다! 저주! * 다시 질 렸어 ... * – blahman

+1

내가 너에게 해줄거야. –

+0

당신은 정확했습니다, 나는 일반 노드가 필요했습니다, 대단히 감사합니다 Mr. skeet – Erik

3

그것이 있어야처럼, 당신의 current 변수는 다음과 같이 선언한다 일반에 노드 클래스를 가정 :

Node<E> current; 

같은이 head 간다 당신이 가질 수있는 다른 노드.

관련 문제