如何使用java从另一个类获取命令行参数
所以假设我有一个java包….
它有主要方法的主类
然后它有一大堆其他类……
我的问题是,是否有可能从这些其他类中获取传递给main方法的args,这些类不是主类的一部分,而是在同一个包中…
不,不可移植,可能有一些基于JVM实现的技巧,但我从未见过它,即使它存在也依赖它是一个非常糟糕的主意。
如果你想在其他地方使用这些值,那么main
函数需要以某种方式使它们可用。
一个简单的方法(不一定是最好的方法)是简单地将字符串存储为main
的第一个东西并提供获取它们的方法:
Scratch2.java:
public class Scratch2 { // Arguments and accessor for them. private static String[] savedArgs; public static String[] getArgs() { return savedArgs; } public static void main(String[] args) { // Save them away for later. savedArgs = args; // Test that other classes can get them. CmdLineArgs cla = new CmdLineArgs(); cla.printArgs(); } }
CmdLineArgs.java:
public class CmdLineArgs { public void printArgs() { String[] args = Scratch2.getArgs(); System.out.println ("Arg count is [" + args.length + "]"); for (int i = 0; i < args.length; i++) { System.out.println ("Arg[" + i + "] is [" + args[i] + "]"); } } }
并且,当使用参数abc
运行时,此输出:
Arg count is [3] Arg[0] is [a] Arg[1] is [b] Arg[2] is [c]
某些(?)JRE实现的系统属性提供系统属性“sun.java.command”以获取用于启动程序的programm-name和参数。 比如“myjar.jar param1 param2 ……”。
虽然此值甚至不属于文档中提到的属性集,但它存在于Oracle-JRE v1.8和OpenJRE v1.8(已测试)中。
我找不到任何文档是否默认支持此值(我最好能找到System#getProperties()
文档中的列表)。 对此有任何澄清将是受欢迎的。 小心轻放!!!
如果您不关心操作系统的可移植性,请阅读/proc/self/cmdline
或操作系统的等效项。
见http://en.wikipedia.org/wiki/Procfs
正如paxdiablo所说,你的主要类必须存储这些参数,然后分发或提供给所需的参数。 通常一个好主意是让另一个类对这些参数进行解析,并为需要它的人提供此类的对象而不是原始命令行。
我在这方面有点新意,但你应该能够将字符串[] args存储到私有实例变量中,然后为它创建一个访问器方法。 例如,
public class test { private String[] myArgs = new String[10]; public static void main(String[] args) { myArgs = args; } public String[] getArgs() { return myArgs; } }
不确定它是否会起作用,但这就是主意。