Java中的main方法将 String [] 作为main方法的输入参数,但我想将 object 作为参数传递。 Java和所有命令行参数化语言只接受有意义的String数组,因为我们使用命令行调用的能力使我们能够输入可由Java中的 String对象表示的文本
这就是我们过去常用的方法:
public static void main (String[] args) {
for (String text: args) {
System.out.println(text);
}
}
如果我们需要传递整数值,我们需要使用解析 从中获取数值的方法。
try {
Arg = Integer.parseInt(args[0]);
} catch (NumberFormatException e) {
System.err.println("Number format mismatch");
}
如果我们需要将整个对象作为参数传递给类怎么办?
此致
答案 0 :(得分:2)
没有。你无法改变它。这是因为命令行实际上只是一个文本块。命令行尝试找出文本的数据类型是没有意义的。
这意味着命令行需要事先了解即将运行的任何数据类型,并以某种方式创建(在Java的情况下)正确的对象并投射到它们。
答案 1 :(得分:2)
除了字符串之外没有办法传递任何东西,因为在命令行中你实际上只能键入字符串。
答案 2 :(得分:2)
据我所知,您只能传递给String格式的主要知识。这是因为传递给main方法的东西来自System.in,可以通过随机用户输入或管道之类的东西,从而将Strings从一个Java程序传递到另一个Java程序。
话虽如此,您可以做的是在对象类中创建一个方法来解析该对象的String形式以重新创建该对象的原始版本。
例如:
public class myRectangle
{
private int length;
private int width;
public myRectangle(int inLength, int inWidth)
{
this.length = inLength;
this.width = inWidth;
}
// the rest of your class
public String toString()
{
return "[" + length + ", " + width + "]";
}
public static Rectangle parseString(String input)
{
int firstBracketIndex;
int commaIndex;
int lastBracketIndex;
firstBracketIndex = 0;
commaIndex = input.indexOf(",");
lastBracketIndex = input.length() - 1;
String aWidth = input.substring(firstBracketIndex, (commaIndex - 1));
String aLength = input.substring((commaIndex + 2), lastBracketIndex);
return new Rectangle(Integer.parseInt(aWidth), Integer.parseInt(aLength));
}
}
这样的事可以解决你的问题。 (在我的代码中可能有一些错误,我写的很长,所以很明显,但你明白了!)
关键是,您创建的解析方法与toString方法相反,以便您可以从命令行中删除类的副本。
答案 3 :(得分:2)
这是不可能的。但是,作为一种解决方法,您可以将逻辑从main移动到接受对象或您需要的任何单独函数。然后main只解析它的字符串参数并调用你的新函数,也可以直接调用它。
答案 4 :(得分:2)
您只能将字符串传递给main。但是,没有什么能阻止String成为XML / JSon的一大块/然后你将其解析成一个对象。
例如在JAXB中:
// Needs xml annotations etc
class T {
}
public static void main(String[] args) {
T t=null;
JAXBContext jc = JAXBContext.newInstance(T.class);
try ( StringReader sr = new StringReader(args[0])) {
t = (T)jc.createUnmarshaller().unmarshal(sr);
} catch (JAXBException ex) {
// handle failure
}
}