2017-12-03 22 views
1

검색을 수행했지만이 특정 주제를 다루는 다른 스레드를 찾을 수 없습니다.메서드를 사용하여 상수를 선언하는 것은 나쁜 형식입니까?

public static final Path DIR = ROOT.resolve(NAME); 

이것이 나쁜 관행으로 간주되는 이유가 있습니까?

+0

필드 값이고 필드 값이 먼저 초기화되므로 해당 코드에 문제가 없어야하므로 구체적인 것은 없습니다. 하지만 어쩌면 당신은 정적 초기화 블록을 사용하여 고려해야합니다. – prsvr

+0

예 : https://stackoverflow.com/a/2420405/544779 –

+0

참조. 답변 주셔서 감사합니다. 어쩌면 이것은 방법을 통해 할당 된 정적 최종 변수가 좋은 실행인지 아닌지 궁금해하는 다른 사람들을 도울 것입니다. –

답변

3

주된 문제점은이 상수를 가진 클래스와 ROOT의 유형 사이의 긴밀한 결합입니다.

그렇다면 DIRprivate final (그러나 static ) 부재가 는 (바람직하게는 생성자 파라미터 등) 클래스로 주입되어야 컴파일 시간에 공지되어 유지되지 않는 것이있다.

+0

목적은 경로가이 경로에 액세스 할 수있는 클래스뿐만 아니라 클래스 전반에 걸쳐 균등하게 사용되고 있는지 확인하는 것입니다. 나는 원래 게터 방법을 가졌지 만, 왜 나 자신에게 묻기 시작했다. 그것은 잘 컴파일하지만 괜찮은 느낌이 들지 않으므로 null을 반환 할 가능성이있는 클래스를 인스턴스화하는 것이 잘못이라고 생각하지는 않습니다 (가능하지는 않지만). 당신은 아마 맞을 것이다. 생성자는 private이기 때문에 생성자 나 정적 초기화 블록에서 초기화하는 것이 좋을 것입니다. 고맙습니다 : P –

1

당신이 한 것은 글로벌 변수 선언입니다. 그것은 나쁜 습관 그 자체입니다. 차라리 제안하는 것은이 변수를 private로 선언하고 해당 디렉토리 (?)에서 작업 할 책임 만 부여되는 클래스 생성자에서 초기화하는 것입니다. 디렉토리 경로 계산 방법이 변경되는 상황을 고려하십시오. 이 변수를 사용하는 다른 모든 클래스에 영향을줍니다. 따라서 부정적인 영향을 최소화하는 것이 좋습니다.

+0

예,이 클래스가 담당하는 파일은 단일 디렉토리에만 있습니다. 루트는 프로그램이 실행 된 곳입니다. C : \와 같은 시스템 루트가 아닙니다. –