【问题标题】:How to implement a class constructor accepting an array of different types as an argument in Java如何在Java中实现一个接受不同类型数组作为参数的类构造函数
【发布时间】:2009-08-18 13:18:15
【问题描述】:

我有以下课程:

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

    Info(){};

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

我想创建一个这个类的数组,但是我想提供一个二维数组作为构造函数的参数,即:

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

这可能吗?如果是这样,我将如何实施它?如果没有,您会建议什么替代方案?

【问题讨论】:

    标签: java arrays constructor


    【解决方案1】:

    可能,但不使用您建议的语法。 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}});
        }
    
    }
    

    【讨论】:

    • 这很有帮助 :) 谢谢!
    【解决方案2】:

    与此相比有什么优势?

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

    【讨论】:

    • 将您的示例与此进行比较,您节省了大约 20 个字符,但丢失了类型检查。一旦你开始循环生成输入,即使是这种优势也会失去。
    • +1。如果 Info 需要一个 String 和一个 int,它的构造函数应该接受一个 String 和一个 int,句点。如果您以一组数组的形式接收外部数据,则可以使用静态方法或工厂从这些数组创建 Info 对象,但构造函数不应在不需要时采用任意对象数组。
    【解决方案3】:

    一个静态工厂方法接受这个输入作为矩形对象数组,创建实例,将它添加到信息数组并返回它?

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

    【讨论】:

      【解决方案4】:

      希望这可能会有所帮助!

      /*
      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();
      }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多