2013-08-11 2 views
1

전역 상수를 게시하는 이러한 방법 중 더 나은 방법은 무엇입니까? 감사!!! 평소 규칙을 다음과Java로 전역 상수를 게시하는 더 좋은 방법은 무엇입니까?

Method 1: final class with public static final fields

public final class CNST{ 
    private CNST(){} 
    public static final String C1; 
    public static final String C2; 
    static{ 
     C1="STRING1"; 
     C2="STRING2"; 
    } 
} 
//so I could call C1, C2 like: 
//...some code... 
//System.out.println(CNST.C1); 
//System.out.println(CNST.C2); 

Method 2: singleton with enum

public enum CNST{ 
    INST; 
    public final String C1; 
    public final String C2; 
    CNST{ 
     C1="STRING1"; 
     C2="STRING2"; 
    } 
} 
//so I could call C1, C2 like: 
//...some code... 
//System.out.println(CNST.INST.C1); 
//System.out.println(CNST.INST.C2); 

답변

1

뭔가는 다음과 같습니다

public class MyAppConstants { 
    public static final String C1 = "STRING1"; 
    public static final String C2 = "STRING2"; 
} 

그런 다음 다음과 같이 나중에 참조 할 수 있습니다 :

System.out.println(MyAppConstants.C1); 

그러나 둘 중 하나를 선택해야한다면 열거 형을 오해의 소지가 있고 기능적으로 도움이되지 않으며 코드를 명확하게 만들지 않기 때문에 첫 번째 코드를 선택한다고 생각합니다.

+0

왜 싱글 톤 오해의 소지가 있음을 깨닫기 위해 enum을 사용합니까? – Will

+0

다음은 열거 형을 올바르게 사용하는 방법을 보여줍니다. http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html 열거 형은 유한 값 세트가있는 유형이며, 유효한 값 중 하나를 선택하십시오. 정적 최종 멤버 변수를 열거 형에 넣는 것이 유효한 Java이지만 클래스에서도 그렇게 할 수 있으므로 사용하는 것이 좋습니다. –

+1

[Effective Java] (http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683/ref=sr_1_1?ie=UTF8&qid=1376207397&sr=8-1&keywords=effective)에 의해 지적되었습니다. + 자바). 싱글 톤을 실현하기 위해 enum을 채택하는 것이 바람직한 방법은 아닙니다. 물론 정규 클래스를 구현할 수는 없습니다. 그러나이 기사에서 지적한대로 [enum Singleton이 Java에서 더 나은 이유] (http : //javarevisited.blogspot .com/2012/07/why-enum-singleton-are-better-in-java.html) "을 참조하십시오. – Will

0

"MyGlobaConstants"와 같은 클래스 이름을 사용하여 상수 이름을 미리 지정하지 않으려면 코드의 문자 수를 최소화하고 싶은 나 같은 short'n'sweet 코드의 팬을 위해 MyBaseActivity와 같은 기본 활동 클래스를 작성하고 그로부터 모든 활동을 확장 할 수 있습니다. 예를 들면 :

public abstract class MyBaseActivity extends Activity { 

    public static final String SOME_GLOBAL_STRING = "some string"; 
    public static final int SOME_GLOBAL_INT = 360; 

이 같은 모든 활동이 사용할 수있는 방법을 만드는 것만 큼 다른 이점을 가지고 있으며, 일반적으로 좋은 방법입니다 지내요.