2012-04-19 4 views
1

나는 javaflow에서 매우 초보자입니다.Javaflow에서 두 개의 연속을 비교하는 방법은 무엇입니까?

class MyRunnable implements Runnable { 

    public void run() { 

     System.out.println("started!"); 
     for(int i=0; i<10; i++) 
     echo(i); 
     } 

     private void echo(int x) { 

     System.out.println(x); 
     Continuation.suspend(); 
    } 

    } 

    Continuation c = Continuation.startWith(new MyRunnable()); 
    Continuation d = Continuation.continueWith(c); 
    Continuation e = Continuation.continueWith(d); 
    Continuation f = Continuation.continueWith(d); 

    if (e.equals(f)) System.out.println("They are equal!"); 
    else System.out.println("They are not equal!"); 

모두 계속 같은 체크 포인트 (D)와 E와 F의 시작과 같은 스택을 캡처하고 그들은 동일한 가없는 이유 "또한 둘은 여전히 ​​그런 1. 인쇄 : 다음과 같은 기본 예제를 생각해 봅시다! "? (프로그램에서이 출력을 제공합니다). 누군가 제게 설명해 주시겠습니까?

+0

+1 왜냐하면 나는 전에 javaflow에 대해 들어 본 적이 없기 때문입니다. 깔끔한 - coroutines! –

답변

0

JavaFlow를 계속 사용하면 기본값 .equals() 의미론을 구현합니다. 즉, 그들은 Object 클래스의 메서드를 오버로드하지 않습니다.

SVN repository의 구현에서 직접 확인할 수 있습니다.

이것은 동일한 스택 상태, 즉 .equals()의 작동 방식과 일치하도록 Continuations를 설정하더라도 false를 반환합니다.

+0

답변 해 주셔서 감사합니다. 유용했습니다. 그래서 e와 f가 두 개의 다른 객체 인 것을 의미합니다. 예제에서 false를 반환했습니다. 맞습니까? –

+0

예'Object.equals()'의 기본 동작은 두 객체가 같은 객체가 아닌 경우'false'를 반환하는 것입니다. 어떤 클래스는'.equals()'메쏘드를 오버라이드합니다 : String, File, Integer ... 몇 가지 예입니다. 그러나 .equals()를 오버라이드하는 것은 클래스의 구현 자의 몫이다. – Max

+0

좋아, 이제 나에게 분명해. 고마워, 맥스! –

관련 문제