Gab*_*lin 5 java oop solid-principles
在我的 Java Web 服务器项目中,我的Main.main方法采用一个参数来指定它将在其中查找某些文件的目录,稍后我将使用该文件。我的问题是,我实际上并没有在我的高级别课程中对这个论点做任何事情,但我的一些低级别课程需要这些信息。
当然,解析和存储我的命令行参数的类是最先使用的类之一,即我的最高级别的类之一,因此我正在努力寻找一种方法来使我的低级别可以访问命令行参数。级别课程。
似乎我唯一的两个选择是要么将它一直传递下去,通过除了将其传递到下一个级别之外从不触及参数的类,或者给它一个全局范围。从设计的角度来看,这两个似乎都不是很好的选择,所以我想知道是否有我缺少的替代方案,或者我是否必须选择两害相权取其轻——或者完全改变我的课程的结构方式。
是的,有很多选择可以做到这一点:
使用系统属性代替main方法参数并且
A。称你的主要为>java -Dmy.path=path_to_directoryMain
b. 使用环境变量
>set my.path=path_to_directory
>java Main
C。在方法中设置main:
public void main(String[] args) {
System.getProperties().put("my.path",args[dirPathIndex]);
在所有情况下,您都可以在代码中的任何位置获取值,如下所示:
String dirPath=System.getProperty("my.path");
在主类中创建一个小型本地静态“缓存”
public class Main{
public static String dirPath;
public void main(String[] args) {
dirPath= args[dirPathIndex];
然后,您还可以在代码中的任何位置将其获取为:
`String dPath=Main.dirPath;`
Run Code Online (Sandbox Code Playgroud)
当然,围绕“本地缓存”方法还有更多选择,但主要思想仍然相同。将值保留在某处,您可以在代码中的任何位置获取它。