저는이 포럼에서 이러한 질문에 대한 답변을 검색하려고 시도했지만 아무도 지금까지는 작동하지 않는 것 같습니다.java 객체 평등이 작동하지 않습니다.
public int stackOverFlow() {int a; a = a + 1; return 0;}
(이 예에서는 사실) 메소드의 반환 유형과 일치해야합니다 반환 식의 유형 :
나는 같은 메소드 선언을 확인 입력합니다.
자바 트리 빌더는 내 문법 (노드 형식)과 기본 깊이 우선 방문객으로 모든 비 터미널에 대한 구문 트리를 생성합니다.
Node 인터페이스를 구현하는 MethodDeclaration 클래스가 있습니다. 노드 인터페이스의 형식은 다음과 같습니다.
public Node accept(TypeVisitor v){ return v.visit(v));
이 인수 방법을 사용하면 TypeVisitor가 MethodDeclaration을 방문 할 수 있습니다.
지금 메소드 선언을 방문, 나는 왜이 경우 바디를 입력하지 않습니다
public Node visit(MethodDeclaration n){
// this visits the f10 Node, which is the return expression,
// and returns a specific Node object
Node rtype = n.f10.accept(this);
// this also does a similar thing by visitng the f1 Node,
// the method's return type, and returns a specific Node Object
Node acType = n.f1.accept(this);
// Now if I compare the two specific Node objects, it always fails.
if(rtype == acType){
//enter here
}
}
을 확인하는 간단한 형식을합니까? 또한 rtype.equals(acType)
시도하고 false를 반환합니다.
나는 또한 false를 반환하는 rtype.toString.equals(acType.toString())
을 시도했습니다.
rtype IntegerType (id=67)
acType IntegerType (id=69)
같이 디버거 출력 모두 RTYPE 및 acType로부터 알 수
가 IntegerType 개체 : 여기 이클립스 디버거를 이용하여 상기 코드에 스테핑 시도 는출력한다.
비교가 실패한 이유는 무엇입니까?
내가 (IntegerType instanceof를 acType)이도 true를 돌려주는 경우 사용하는 경우 (IntegerType instanceof를 RTYPE가)이
를 true를 돌려 경우 내가 사용하는 경우.
그러나 개체 비교는 항상 실패합니까?
내가 (파서 세대) JavaCC에 사용하고, JTB (AST 및 방문자 창조자), 일식 및 자바 개체 식별 1.7 자바에서
노드가 * 같을 것이라고 기대하는 이유는 분명하지 않습니다. 우리는 두 노드가 무엇을 나타내는지를 알기 위해'accept' 메소드에 대해 충분히 알지 못합니다. –
또한 미래에는 서식을 세 심하게주의하십시오. http://tinyurl.com/so-list –
을 읽으십시오. "=='"have ...를 사용할 때 "내 객체가 같지 않습니다. – cHao