2009-08-18 38 views
1

的說法我有下面的類:如何實現類的構造函數接受不同類型的數組中的Java

private class Info{ 
    public String A; 
    public int B; 

    Info(){}; 

    public OtherMethod(){}; 
    private PrivMethod(){}; 
} 

我要創建這個類的一個數組,但我想提供一個二維數組作爲構造函數的參數,即:

Info[] I = new Info({{"StringA", 1}, {"StringB", 2}, {"StringC", 3}}); 

這可能嗎?如果是的話,我會如何執行它?如果不是,你會建議什麼替代方案?

回答

3

它的可能性,但不使用您建議的語法。 Java不支持用構造函數創建數組。請嘗試以下操作:

public class Info { 

    public String a; 
    public int b; 

    private Info(Object [] args) { 
     a = (String) args[0]; 
     b = (Integer) args[1]; 
    } 

    public static Info[] create(Object[]...args) { 
     Info[] result = new Info[args.length]; 
     int count = 0; 
     for (Object[] arg : args) { 
      result[count++] = new Info(arg); 
     } 
     return result; 
    } 

    public static void main(String [] args) { 
     Info[] data = Info.create(new Object[][] {{"StringA", 1}, {"StringB", 2}, {"StringC", 3}}); 
    } 

} 
+0

這是非常有用的:)謝謝! – alkar 2009-08-18 13:40:39

1

將此輸入作爲矩形對象數組接受此輸入的靜態工廠方法,創建實例並將其添加到Info Array並將其返回?

Info[] infos = Info.CreateInfoArray(new object[][] { 
      {"StringA", 1}, 
      {"StringB", 2}, 
      {"StringC", 3} }); 
0

希望這可能有所幫助!

/* 
Info.java 
*/ 
public class Info{ 
    public String A; 
    public int B; 

    Info(String s,int x){ 
     A=s; 
     B=x; 
    }; 
    public void show(){ 
     System.out.println(A+" is "+B); 
    } 
    //public OtherMethod(){}; 
    //private PrivMethod(){}; 
} 

/* 
MainClass.java 
*/ 
public class MainClass { 
public static void main(String[] args) { 
    Info in[] = {new Info("one",1),new Info("one",1),new Info("one",1)}; 
    //System.out.println(in[0]); 
    in[0].show(); 
} 

} 
3

與此相比有什麼優勢?

Info[] infos = new Info[] {new Info("StringA", 1), 
          new Info("StringB", 2), 
          new Info("StringC", 3) 
         }. 
+0

事實上,簡化的語法 – alkar 2009-08-18 13:41:51

+0

比較你的例子,你可以節省大約20個字符,但是會丟失類型檢查。 一旦你開始在一個循環中生成你的輸入,無論如何,即使這個優點也會丟失。 – Zed 2009-08-18 13:44:53

+0

+1。如果Info需要一個String和一個int,它的構造函數應該接受一個String和一個int,句點。如果以外部數據作爲一組數組接收外部數據,則可以使用靜態方法或工廠從這些數組創建Info對象,但構造函數不應該隨意使用任意數組的對象。 – ColinD 2009-08-18 13:54:45

相關問題