我们可以改变Java的主要方法吗?



Java 中的 Main 方法将 String[] 作为主方法的输入参数,但我想将对象作为参数传递。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");
 }

如果我们需要将整个对象作为参数传递给类怎么办?

问候

据我所知,您只能以字符串格式传递到主要知识。这是因为传递给 main 方法的内容来自 System.in,无论是通过随机用户输入还是管道之类的东西,您就可以将字符串从一个 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 方法相反的分析方法,以便您可以从命令行中获取类的副本。

No. 您无法更改它。 这是因为命令行实际上只是一个文本块。 命令行尝试找出文本的数据类型是没有意义的。

这意味着命令行需要事先了解即将运行的任何内容中可用的数据类型,并以某种方式创建(在 Java 的情况下)正确的对象并强制转换为它们。

除了

字符串之外,没有办法传递任何东西,因为在命令行中,您实际上只能键入字符串。

是不可能的。但是,作为一种解决方法,您可以将逻辑从 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
            }
  }

最新更新