2014-01-10 40 views
2

Java中的主要方法有String []作为主方法的输入参数,但我想通过对象作为参数。 Java和所有命令行参数化的语言只接受的论点也解释了我们的调用使用命令行让我们来输入文字,可以通过String对象在Java中我们可以改变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"); 
} 

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

Regards

+5

的一点是,从那里你得到了'Object'不启动'main'? –

回答

2

据我所知,你只能传递给String格式的主要知识。这是因为传递给主方法的东西来自System.in,或者通过随机用户输入或者诸如管道之类的东西,从而将Strings从一个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方法的反转,这样你就可以在命令行上取得你班级的副本。

2

不可以,你不能改变它。这是因为命令行只是一个真正的文本块。命令行试图找出文本的数据类型是没有意义的。

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

2

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

2

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

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 
      } 
    } 
相关问题