문제

예를 들어:

public void doSomething() {

    final double MIN_INTEREST = 0.0;

    // ...  
}

개인적으로, 나는 이러한 대체 상수가 클래스 수준에서 정적으로 선언 된 것을보고 싶습니다. 나는 그 문제에 대한 "산업 관점"을 찾고 있다고 생각합니다.

도움이 되었습니까?

해결책

내 시작 위치는 모든 변수 또는 상수가 가능한 첫 번째 사용에 가깝게 선언/초기화되어야합니다. 가능한 한 단단히. - 당신이 나에게 그것이 다른 이유를 줄 수 없다면.

예를 들어, 메소드 스코프 파이널은 공개 API에서 볼 수 없습니다. 때로는이 정보가 수업 사용자에게 유용 할 수 있으며 위로 이동해야합니다.

당신이 질문에 준 예에서, 나는 min_interest가 아마도 사용자가 손을 잡고 싶어하는 정보 중 하나 일 것이라고 말할 것입니다. 그리고 그것은 방법이 아니라 수업에 스코핑되어야합니다. (그러나 예제 코드에는 컨텍스트가 없지만 내 가정은 완전히 잘못 될 수 있습니다.)

다른 팁

여러 가지 방법으로 사용되는 경우에만 수업 수준에 넣어야한다고 생각합니다. 그것이 그 방법에만 사용된다면 그것은 나에게 괜찮아 보인다.

기술적으로, Java에는 "방법 범위 상수"와 같은 것은 없습니다. 당신이 말하는 것은 단순히 최종 로컬 변수입니다. 각 메소드 호출마다 파괴됩니다.

http://www.java-tips.org/java-se-tips/java.lang/how-do--declare-a-constant-in-java.html

정보 숨기기와 모듈성은 핵심 원칙이며 좁은 범위는 더 나은 정보 숨기기입니다. 상수가 방법에 의해서만 필요하다면, 은신처가 양호합니다. 상수가 다른 곳에서 유용한 경우, 더 넓은 범위로 가져 오지만 필요에 따라 광범위하게 만 가져옵니다.

당신은 아마도 일정하기 때문에 걱정할 것입니다. 따라서 일부 글로벌 속성 테이블에 속할 수 있습니다. 어쩌면 그렇습니다. 어쩌면 그렇지 않을 수도 있습니다. 귀하의 우려는 유효하지만 모든 상수에 가장 적합한 장소는 없습니다.

나는이 방법을 스코핑 된 상수를 직접 사용했지만 종종 동료가 코드 검토 중에 MOD를 다운 하락시킬 것입니다. 다시 말하지만,이 동료들은 오픈 소스를 읽거나 쓰는 것이 아니라 엔터프라이즈 소프트웨어에 사용됩니다.

나는 단일 방법 내에서 사용되는 경우 클래스 레벨 상수를 사용하는 것이 합리적이지 않지만 1 명 이상의 동료가 위로 올라갈 것을 주장하는 것을 발견했습니다. 가독성 및/또는 성능에 영향을 미치지 않으면 너무 견고하지 않기 때문에 보통 준수합니다.

나는 이것에 대해 다르게 받아들이고있다 : IMHO IMHO 특히 이런 이유로 팀에서 일하는 경우 파일/클래스 범위에 배치하는 것이 좋습니다. 작은 코드로 시작한다고 가정 해보십시오 ...

public void doSomething() {

  final double MIN_INTEREST = 0.0;

  // ...  
}

그리고 당신 팀의 다른 멤버들은 많은 방법으로 수업을 확장하고 이제 수업은 훌륭합니다. 500 lines/50 methods 거대한 수업. 상수로 새로운 방법을 추가하려는 엔지니어의 경험을 상상해 보면 1 필요에 맞는 상수를 찾는 전체 클래스를 스캔하고 2 기존 코드와 충돌하지 않기를 바라면서 상수를 클래스 범위로 이동 3 또한 방법을 추가하십시오.

대신 파일/클래스 범위에 모든 상수를 추가하면 엔지니어는 1 기존 상수를 찾을 수있는 단일 장소 및 2 의미가있는 곳에서 다른 상수를 도출하십시오. (예를 들어 상수가있는 경우 pi 값으로 새로운 상수를 정의 할 수도 있습니다. pi/2).

클래스 레벨 또는 메소드 (로컬) 레벨에서 최종 변수를 정의 할 수있는 이유는 (로컬) 메소드 내부의 글로벌 정적 상수를 무시할 수 있기 때문입니다.

예시:

public class Test {

    final double MIN_INTEREST = 0.0;

    /**
     * @param args
     */
    public static void main(String[] args) {


        Test test = new Test();

        test.doSomethingLocal();
        test.doSomethingGlobal();

    }

    public void doSomethingGlobal() {

        System.out.println("Global-> " + MIN_INTEREST);

    }

    public void doSomethingLocal() {

        final double MIN_INTEREST = 0.1;

        System.out.println("Local-> " + MIN_INTEREST);

    }
}

출력은 다음과 같습니다.

Local-> 0.1
Global-> 0.0

따라서 귀하의 질문은 의미가 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top