我们可以改变java的主要方法吗?
Java中的Main方法将字符串[]作为Main方法的输入参数,但我想将对象作为参数传递。Java和所有命令行参数化语言只接受参数的字符串数组,这是有意义的,因为我们使用命令行调用的能力使我们能够输入可以由Java中的字符串对象表示的文本 这就是我们过去使用的方法,如:我们可以改变java的主要方法吗?,java,string,object,parameters,main,Java,String,Object,Parameters,Main,Java中的Main方法将字符串[]作为Main方法的输入参数,但我想将对象作为参数传递。Java和所有命令行参数化语言只接受参数的字符串数组,这是有意义的,因为我们使用命令行调用的能力使我们能够输入可以由Java中的字符串对象表示的文本 这就是我们过去使用的方法,如: public static void main (String[] args) { for (String text: args) { System.out.println(text); } } 如果我们需要传递整数值,我们
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");
}
如果我们需要将整个对象作为参数传递给类,该怎么办
问候不。您不能更改它。这是因为命令行实际上只是一块文本。命令行尝试找出文本的数据类型是没有意义的
这意味着命令行需要事先了解即将运行的任何程序中可用的数据类型,并以某种方式创建(在Java中)正确的对象并将其转换为字符串。除了字符串之外,没有其他方法可以传递任何内容,因为在命令行中,您实际上只能键入字符串。据我所知,您只能以字符串格式传递给主要知识。这是因为传递给main方法的内容来自System.in,可以通过随机用户输入,也可以通过管道之类的方式,将字符串从一个Java程序传递给另一个Java程序 也就是说,您可以做的是在对象类中创建一个方法来解析该对象的字符串形式,以重新创建该对象的原始版本 例如:
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方法相反的解析方法,以便可以从命令行复制类。这是不可能的。但是,作为一种解决方法,您可以将逻辑从main移动到一个单独的函数,该函数接受对象或任何您需要的内容。然后main将只解析其字符串参数并调用新函数,该函数也可以直接调用。您只能将字符串传递给main。但是,没有任何东西可以阻止该字符串成为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
}
}
关键是,您从何处获得
对象
,而不启动main
?