2014-01-10 38 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 
      } 
    } 
相關問題