2012-02-14 2 views
2

Foo이라는 클래스가 있다고 가정 해 보겠습니다. 이 클래스는 많은 사람들이 수정할 수 있으며 정보를 콘솔에 출력합니다. 이 효과를 위해 다음과 같은 방법을 사용합니다.클래스가 java에서 메소드를 사용하지 못하게 할 수 있습니까?

private void print(String message){ ... } 

우리가 원하는 형식으로 화면에 출력됩니다. 다른 DEVS의 코드를 검토하는 동안

그러나 나는 그들이 지속적으로 겨우 읽을 수있는 출력물을 초래하는 대신 System.out.println(...)
를 호출 것을 알 수있다.

제 질문은 다음과 같습니다 : Foo.java에서 System.out.println()을 사용하는 것을 방지 할 수 있습니까? 그렇다면 어떻게?

나는 이것을 보려고했지만, 내 질문과 관련이없는 상속과 관련된 모든 것을 발견했다.

고맙습니다.
N.S.

편집 : 메소드 사용을 막기 위해해야 ​​할 일은 dev가 제거 할 수 있음을 알고 있지만 //IMPORTANT으로 표시된 코드를 절대로 제거하지 말아야합니다. 따라서 억제 코드로 사용할 수 있습니다.

EDIT2 : 나는 개발자에게 "오류"를 필터링하기 위해 코드 리뷰를 사용하지 말라고 말할 수 있지만 1) 나는 이미 그것을하고 있으며 많은 시간을 요한다. 2) 질문 이것이 가능한지 아닌지, 내 devs를 다루는 방법이 아닙니다.

+7

코드 대신 프로세스/통신으로 구현하는 것이 어떻습니까? devs에게 "sysout을 사용하지 않습니까?"라고 말하십시오. –

+1

프로그래머에게 말해 준다면 급여를 삭감 할 것입니다. – vulkanino

+0

콘솔에 직접 인쇄하는 대신'log4j'와 같은 로깅 라이브러리를 사용하십시오. 무엇이 로깅되어 있는지를 구성합니다. 개발자가 전환 할 때까지 점점 더 막대기가 많은 개발자를이기십시오. – millimoose

답변

3

에 해당하는 경우 자바 파일 중 일부 부분 집합을 기준으로 예를 데리고 그 예를 수정할 수 및 거부해야하지만 개발자가 System.out에 직접 선호 할 것이다 사용하지 않도록 통신, System.out을 다른 PrintStream으로 설정 한 다음 private 메서드에서 대체 PrintStream을 사용할 수 있습니다. 그런 식으로 사람들이 System.out.println을 사용할 때 아무 것도 출력하지 않지만 대체 PrintStream을 사용할 수 있습니다 ... http://halyph.blogspot.com/2011/07/how-to-disable-systemout.html

+0

이것이 내가 할 일이다. 정보 주셔서 감사합니다! (나는 SO가 나를 허용하자마자이 대답을 받아 들일 것이다) –

6

public 방법은 공개입니다. 액세스를 제한 할 수있는 방법이 없습니다.

이러한 종류의 문제는 일반적으로 PMD 또는 checkstyle과 같은 코드 검사기를 설정하고이를 연속 통합 빌드에 통합함으로써 "해결"됩니다. 따라서 이러한 것들에 대한 위반은 큰 망치를 가진 사람에게 이메일로 전송됩니다 :-)

+0

그래, 일부 checkstyle 규칙이 잘되어야합니다. 결국 정적 분석 도구가 거기에 있습니다. – Voo

2

개정 관리 시스템 (SVN, Git, Mercurial)의 사전 커밋 후크는 System.{err,out}의 사용을 위해 grep을 사용하고 커밋을 방지 할 수 있습니다.

http://stuporglue.org/svn-pre-commit-hook-which-can-syntax-check-all-files/은 SVN의 파일 확장자에 따라 다른 변경된 파일에 대한 작업을 수행하는 예제입니다. 다음과 같은 일이

egrep -q '\bSystem\.(err|out)\b' 
1

아니요, 불가능합니다. % 클래스가 Java에서 특정 메소드를 사용하는 것을 방지합니다.

는 그

나의 제안은 빌드 프로세스에 코드 분석을 추가하고 System.out.println의 발생에 빌드를 실패하는 것입니다 ... 가졌어요. 이 길을가는 데 관심이 있다면 시작할 수있는 좋은 곳은 PMD입니다.

또한 개발자들과 건설적인 토론을하고 그들이하는 일을 왜하는지에 대해 이야기하십시오. 행운을 빕니다.

2

System.out 호출을 출력을 무시하거나 로깅 시스템으로 리디렉션하는 스트림으로 리디렉션 할 수 있습니다.

System.setOut(printStream); 

또한 프로덕션 환경에서 System.out.println를 사용하는 사람들을 죽일 수 있습니다.

1

SystemOutputStream을 예외로 설정하거나 자신의 print 구현 (공개해야하는)으로 리디렉션 할 수 있습니다.

관련 문제