Java 中将由应用程序用户更改的常量存储在哪里?

Where to store constants in Java that will be changed by users of the application?

所以我的 Java 应用程序中的常量将被用户更改,因为它们指定了本地数据库要求(用户名、密码、端口号等)。现在我应该将它们保留在我的主 class 中并向用户指定他们将必须更改此 class 中的以下变量。或者我应该在我的主要 class 将实现的接口中定义它们吗?或者有什么更好的建议?

编辑:糟糕,我意识到我使用了不正确的术语。我应该改用设置变量。

在程序执行期间保持不变但可以更改的值称为 settingspreferences。 Java 供应 preferences API,可用于此目的。

下面是一个使用 API:

检索用户首选项的示例
Preferences  prefs = Preferences.userRoot().node(this.getClass().getName());
String userName = prefs.get("userName");
String encryptedPassword = prefs.get("encryptedPassword");

我想我明白你打算做什么了。许多人所做的是创建一个属性文件,该文件由您的 java 程序读取,该程序将这些变量视为不会更改的值。

这使用户能够在执行前更改配置文件,并允许您的程序将这些变量视为不变的。我不确定我会让它们保持不变,但可以将它们视为不变的值。

http://javarevisited.blogspot.com/2012/03/how-to-read-properties-file-in-java-xml.html

Android XML layout constants

我认为这些变量的位置取决于您选择如何实现您的程序设计。需要练习才能了解何时创建单独的 class 有意义,所以如果您一开始不理解,请不要感到沮丧。如果您的主要 class 变得冗长和复杂,这就是可能是时候将内容拆分成单独的 class 的一个例子。

您可能会发现这些链接有助于决定何时适合创建单独的 classes:

https://softwareengineering.stackexchange.com/questions/154228/why-is-it-good-to-split-a-program-into-multiple-classes

如果您尝试更永久地保存变量(即通过设备重启、通过设备关机),您可以使用首选项。将下面这些方法中的 dataType 替换为 String、char、int 等

  //save prefs
    public void savePrefs(dataType key, dataType value){
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putDataType(key, value);
        editor.commit();
    }

    //get prefs
    private String LoadPreferences(dataType key, dataType value){
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        DataType data = sharedPreferences.getDataType (key, value);
        return data;
    }

我们在当前项目中使用 excel sheet 映射 属性 及其值。用户可以修改excel sheet 为want 值发送给我们

我们从 excel 数据生成 XML。我们创建了一个 'configuration' 页面,我们在其中上传了 XML。我们编写了一个程序,每 30 分钟 运行 检查 XML 中的数据是否已更改。这不是最好的做事方式,但它对我们有用,因为我们的应用程序中有很多属性需要根据业务需求不断更改。