2011-04-14 71 views
4

从我读过的使用接口定义常量中读到的内容通常在Java中看不到,除非你打算由类继承的常量实现接口。但我已经遇到这样的代码往往在Android的程序:在Android中使用接口命名空间常量

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)。更好的选择是:

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

    private Tags() {} 
} 

由于Tags类是final的,没有类可以延长它。相反,希望使用常量从Tags类简单地做:

import my.package.Tags; 

然后:

System.out.println(Tags.BLOCK); 

从Java 5,常数可以直接输入:

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

所以他们可以像这样使用:

System.out.println(BLOCK); 
+0

非常感谢!很好的答案。 – 2011-04-16 15:56:41