2013-03-28 3 views
0

Java에서 일반 연결 목록을 작성 중이며 한 가지 문제점을 제외하고는 모든 것이 작동합니다.일반 반환 형식을 Java의 비슷한 일반 변수와 비교하십시오.

목록 노드는 E 유형의 변수 "data"를 보유하고 일반 링크 된 목록 코드에서 E 유형의 "tempData"변수를 갖습니다. 데이터 유형 E는 연결된 목록을 사용하는 프로그램에 의해 결정됩니다.

내가 뭘하려는 건 노드 함수 getData()를 호출하여 연결된 노드 "데이터"에서 변수를 검색하고 tempData라는 변수에 저장하는 것입니다.

tempData = firstNode.getData(); 

내 문제는 내가받을 컴파일 할 때 오류들이 "호환되지 않는 유형"것을 말하는 것입니다 :

여기에 현재 코드입니다. 나는 런타임에 동일한 데이터 유형이 될 것이라고 알고 있지만 컴파일을위한 구문을 어떻게 만족시킬 수 있습니까?

나는에 코드를 넣어 시도 :

if(firstNode.getData() instanceof tempData.getClass()) 

그러나 클래스, 메소드를 호출 할 수 없습니다 있어야 할 곳에 작동하지 않았다. 나도 다음을 시도했지만 효과가 있었지만 원래 컴파일 오류가 발생했습니다.

if((firstNode.getData()).getClass == tempData.getClass()) 

모든 도움을 주시면 대단히 감사하겠습니다. tempData위한

EDIT 3-28-13

선언 "E tempData;"인

firstNode에 대한 선언은 "private ListNode firstNode;"입니다.

firstNode의 데이터 선언은 "개인 E 데이터"입니다. .getData(); LinkedList의 클래스에 대한

헤더 "공용 클래스 LinkedList의 E"ListNode 클래스

헤더 "공용 클래스 ListNode E"

는 헤더에 모두 에스는 주변 문자에 비해보다 더 큰이

, 그들은 단지입니다 게시 할 때 나타나지 않습니다.

+0

질문에 tempData와 firstNode의 선언을 추가 할 수 있습니까? 내가 의심하는 문제를 더 쉽게 볼 수있을 것입니다. – Jules

+0

@Jules E tempData; firstNode (및 모든 노드) 개인 E 데이터; .getData()에 의해 반환됩니다. – FreakyDan

+0

firstNode 자체와 getData() 메서드는 어떻게 선언됩니까? – Jules

답변

1

한 가지 가능한 대답은과 같이, 목록에 클래스의 객체를 저장하는 것입니다 :

public MyList(Class<E> clazz) { 
    this.clazz = clazz; 
} 

... 

new MyList<E>(E.class); 

것은 그런 다음 사용할 수 있습니다

Class<E> clazz; 

그리고 생성자에서 올바른 객체와이 초기화 이 클래스 객체는 객체를 올바른 유형으로 캐스팅합니다 : clazz.cast(firstNode.getData()).

더 나은 해결책이 있지만 최악의 경우이 접근 방식이 효과적입니다.

+0

코드를 변경할 때 몇 가지 오류가있어서이를 다음과 같이 변경했습니다 : Class c = tempData.getClass(); 다음 오류가 발생하여 캐스팅이 여전히 작동하지 않습니다. LinkedList.java:115 : 오류 : 호환되지 않는 유형 tempData = c.cast (firstNode.getData()); 그래서 같은 유형으로 캐스팅 해 보았습니다. LinkedList.java:115 : 오류 : 예기치 않은 유형 c.cast (tempData) = c.cast (firstNode.getData()); ^ 내가 의도 한 바를 잘못하고 있습니까? – FreakyDan

+0

내가 의미하는 바를 더 설명했다. 이게 도움이 되나요? – Jules

+0

나는 당신이 쓴 것을 시도하고 싶지만, 이것은 UML 다이어그램이 제공된 할당을위한 것이기 때문에, 나는 생성자의 매개 변수를 변경할 수 없다. – FreakyDan