问题描述
我有若干个final 的字符串,字符串的值需要从properties文件中读取,功能对照代码如下所示:public interface Constant {private static final PropertiesUtil propertiesUtil = new PropertiesUtil("api-config.properties");public static final String name= propertiesUtil.getValue("name"); public static final String name= propertiesUtil.getValue("name"); public static final String name= propertiesUtil.getValue("name"); public static final String name= propertiesUtil.getValue("name"); public static final String name= propertiesUtil.getValue("name"); public static final String name= propertiesUtil.getValue("name"); public static final String name= propertiesUtil.getValue("name"); public static final String name= propertiesUtil.getValue("name"); public static final String name= propertiesUtil.getValue("name"); public static final String name= propertiesUtil.getValue("name"); public static final String name= propertiesUtil.getValue("name"); public static final String name= propertiesUtil.getValue("name"); public static final String name= propertiesUtil.getValue("name"); }我上面这样写肯定是编译不通过的。谓知大家有什么好点子来实现我所要的实现呀?
解决方案
问题在于interace只允许出现public & static & fianl类型的属性(propertiesUtil 是private的),为什么不考虑将propertiesUtil 做成单例的?这样就变成了:对于PropertiesUtil:public class PropertiesUtil private static final instance = new PropertiesUtil("api-config.properties"); private PropertiesUtil(String config) { //init codes.} public static PropertiesUtil getInstance() { return instance; }} //end of class对于Interface:public static final String name= PropertiesUtil.getInstance().getValue("name");。。。。 Java中的interface实际上只是一个接口规范,所以定义private类型的变量是没有意义,也是不被允许的。
解决方案二:
interface中不允许有private修饰的成员变量,你可以使用abstract class来代替interface。
解决方案三:
把重复的name去掉 按理说能编译啊(不行换成final class呗)