2011-04-14 6 views
4

상수를 정의하기 위해 인터페이스를 사용하여 읽은 것은 일반적으로 클래스가 상속하는 상수를 인터페이스를 구현하려는 경우를 제외하고는 Java에서 보입니다. 하지만 안드로이드 프로그램에서 종종 다음과 같은 코드 건너했습니다 안드로이드에서 네임 스페이스 상수에 인터페이스 사용하기

interface Tags { 
    String BLOCK = "block"; 
    String TITLE = "title"; 
    String START = "start"; 
    String END = "end"; 
    String TYPE = "type"; 
} 

는 개인적으로 나는 종류의 네임 스페이스에 함께이 같은 그룹 정수 할 수있는 좋아한다. 그래서 내 질문에이 단점은 무엇입니까? 컴파일러가 정적 인 최종 문자열을 사용하는 것만 큼 효율적이지는 않다고 가정합니다.

답변

7

먼저 인터페이스의 필드가 암시 적으로 정적이며 최종적인 것을 알아야합니다.

상수 인터페이스는 일반적으로 안티 패턴으로 간주됩니다 (http://en.wikipedia.org/wiki/Constant_interface 참조). 더 나은 대안이 될 것이다 다음 Tags 클래스는 최종

public final class Tags { 
    public static final String BLOCK = "block"; 
    // Other constants... 

    private Tags() {} 
} 

때문에, 어떤 클래스를 확장 할 수 있습니다. 대신, Tags에서 상수를 사용하고자하는 클래스는 단순히 수행 한 후

import my.package.Tags; 

과 :

System.out.println(Tags.BLOCK); 

자바 5에서 상수를 직접 가져올 수 있습니다 : 그래서 그들은

import static my.package.Tags.BLOCK; 
// Other static imports... 

다음과 같이 사용할 수 있습니다 :

System.out.println(BLOCK); 
+0

대단히 감사합니다! 좋은 대답. –