2011-03-22 2 views
0

에 대한 질문은 나는이 코드를 가지고자바 : 어설-행동

import java.util.ArrayList; 
import java.util.List; 

public class AssertTest { 
    public static void main(String[] args) { 
     List<String> list = new ArrayList<String>(); 
     assert(list.add("test")); //<-- adds an element 

     System.out.println(list.size()); 
    } 
} 

출력 :

0 

왜 출력 목록이 비어? assert는 어떻게 작동합니까? 미리 감사드립니다.

+0

예. 방금 -ea 플래그를 활성화하고 1을 출력합니다. – Simon

+0

ok -'add()'는 부울을 반환합니다. 내가 알지 못했던 것, 그리고 나는 아직도 알고 싶지 않습니다. 그런 반환 유형은 단지 바보입니다. 'Collection'의 서브 타입이 그러한 함수를 제공 할 필요가 있다면, 서브 타입은 새로운 메소드를 추가 할 수 있습니다. – irreputable

+0

'add()'가 boolean을 반환한다는 사실은'HashSet '를 사용할 때 유용 할 수 있습니다. 세트에 포함되어있는 것과 같은 해시 코드를 가지는 값을 추가하려고하면,'add()'메소드는 false를 돌려줍니다. 'Collection '는'n '값만 허용한다고 생각할 수도 있습니다. 따라서 반환 값은 완전히 정당화됩니다. – Simon

답변

5

다음과 같이 -ea 플래그를 사용하여 어설 션을 활성화해야합니다.

java -ea -cp . AssertTest 

또한 주장을 사용하는

+1

더하기, 응용 프로그램에 단정 표현식의 부작용을 사용하지 마십시오! – rsp

+0

예, 그게 전부예요. – Simon

0

어설 션을 활성화해야합니다. 즉 으로 실행하십시오. -ea AssertTest

5

부작용이있는 항목에는 절대로 사용하지 마십시오. 어설 션을 활성화하지 않고 실행하면 (-ea으로 설정) list.add("test")이 실행되지 않습니다. 이 그 원인이 있기 때문에 주장은, 프로그램의 올바른 작동에 필요한 코드를 포함 할 수 없습니다 -

if (!list.add("test")) { 
    assert false; 
    // Handle the problem 
} 
0

부대 귀하의 질문에 :

다음과 같이이 거짓하지만 아무것도 주장하지 않을 수있는 좋은 습관

어설 션이 활성화되었는지 여부에 따라 올바른 작업을 수행해야합니다.

0

부울식이 true 또는 false인지 확인하는 assert 메서드입니다. 표현식이 true로 평가되면 효과가 없습니다. 그러나 false로 평가되면 assert 메서드가 스택 추적을 인쇄하고 프로그램이 중단됩니다. 이 샘플 구현에서는 문자열의 두 번째 인수를 사용하여 오류의 원인을 인쇄 할 수 있습니다.