【问题标题】:can we change the main method of java? [duplicate]我们可以改变java的main方法吗? [复制]
【发布时间】:2014-01-29 08:52:34
【问题描述】:

Java 中的 Main 方法将 String[] 作为 main 方法的输入参数,但我想将 object 作为参数传递。 Java 和所有命令行参数化语言仅接受 String 参数数组,这是有意义的,因为我们使用命令行调用的能力使我们能够输入可以由 Java 中的 String object 表示的文本

这就是我们过去使用的方法:

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");
 }

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

问候

【问题讨论】:

  • 重点是,你从哪里得到Object 而没有开始main

标签: java string object parameters main


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    没有。你不能改变它。这是因为命令行实际上只是一个文本块。命令行试图找出文本是什么数据类型是没有意义的。

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

    【讨论】:

      【解决方案3】:

      除了字符串之外没有其他方法可以传递,因为在命令行中实际上你只能输入字符串。

      【讨论】:

        【解决方案4】:

        这是不可能的。但是,作为一种解决方法,您可以将逻辑从 main 移动到接受对象或任何您需要的单独函数。那么 main 只会解析它的字符串参数并调用你的新函数,也可以直接调用。

        【讨论】:

          【解决方案5】:

          您只能将字符串传递给 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
                      }
            }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-02-16
            • 2013-05-03
            • 1970-01-01
            • 2011-03-10
            • 1970-01-01
            • 2023-03-28
            • 2011-02-19
            相关资源
            最近更新 更多