2012-08-02 1 views
2

나는 자바가 일반적으로 메소드에서 반환 된 객체에 대해 신경 쓰지 않는다는 것을 알고 있지만,이 경우 Api 사용자가 반환 된 인스턴스를 그렇지 않으면 바로 실행됩니다.반환하는 객체를 무시할 때 컴파일 타임 경고

일반 자바 :

Runnable someTask() { 
    ... 
} 

someTask(); // ok 

컴파일 시간 경고를 말할와이를 방지 할 수있는 방법이 있나요

Runnable someTask() { 
    ... 
} 

addToExecutionList(someTask()); // ok 
someTask(); // gives warning 

해야 하는가?

답변

4

컴파일 타임 경고와 함께이를 방지 할 수있는 방법이 있습니까?

아니요. 호출자가 메소드의 반환 값을 사용하도록 강요 할 방법이 없습니다. FindBugs과 같은 것으로 dodgy 코드로보고하는 옵션이있을 수 있습니다.

+0

흠 ... 런타임 솔루션을 생각해 주시겠습니까? – Theodor

+1

@Theodor :별로. 나는 파이널 라이저로 뭔가를 고려하고 있었지만, 그것은 정말로 해킹 될 것이고 항상 적절하지는 않을 것이다. –

+0

아니요, 해킹 된 솔루션을 API에서 피해야한다는 데 동의합니다. 감사. – Theodor

2

컴파일 타임 경고는 가장 일반적인 오류에 대해서만 나타납니다. 반환 값을 무시하는 것은 일반적인 습관입니다.

사용할 수있는 것은 버그, checkstyle 또는 IntelliJ의 정적 분석과 같은 정적 분석 도구입니다.

2

당신은 그 목록에 자신을 추가하는 someTask 돌봐를 someTask에 매개 변수를 추가 할 수 있습니다 :

void someTask(List<Runnable> executionList) { 
    // ... 
    executionList.add(task); 
} 

그러나 물론

, 그 방법에 말도 안되는 목록을 통과 방지하지 않을 것이다.

당신은 실행 가능한이 항상 사용자가 someTask를 호출 할 수 없습니다 그러나 "어떤 종류를 볼 수 있도록 다음 API를 변경해야합니다, 아주 특별한 목록에 추가, 있는지 확인하려면 공장 "은 이라는 작업을 생성하여 해당 목록에 추가합니다. 어느 누구도 그 목록에서 새로 생성 된 작업을 제거 할 수 없도록 내부적이어야합니다.)

+0

첫번째 해결책은 생성자 매개 변수로'List executionList'와'executionList.add (this)'를 가진'AbstractTask'로 구현 될 수 있습니다. 런타임시 non-sense리스트를 검사 할 수 있습니다. 모든 버그, 일부. – Theodor