Java 在Android中使用命名空间常量的接口

Java 在Android中使用命名空间常量的接口,java,android,Java,Android,从我所读到的内容来看,在Java中,使用接口来定义常量通常被轻视,除非您打算由实现接口的类继承常量。但我在Android程序中经常遇到这样的代码: interface Tags { String BLOCK = "block"; String TITLE = "title"; String START = "start"; String END = "end"; String TYPE = "type"; } 就我个人而言,我喜欢能够像这样将常量组合到一

从我所读到的内容来看,在Java中,使用接口来定义常量通常被轻视,除非您打算由实现接口的类继承常量。但我在Android程序中经常遇到这样的代码:

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

就我个人而言,我喜欢能够像这样将常量组合到一个不同的名称空间中。那么我的问题是这样做有什么不利之处吗?我假设它可能不如编译器内联使用静态最终字符串那样有效

首先,要知道接口中的字段是隐式静态的和最终的

常量接口通常被视为反模式(请参阅)。更好的选择是:

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

    private Tags() {}
}
由于
标记
类是final,因此任何类都不能扩展它。相反,要使用
标记中的常量的类只需执行以下操作:

import my.package.Tags;
然后:

System.out.println(Tags.BLOCK);
从Java 5中,可以直接导入常量:

import static my.package.Tags.BLOCK;
// Other static imports...
因此,它们可以这样使用:

System.out.println(BLOCK);

非常感谢你!回答得很好。