如何在Java中实现接受不同类型数组作为参数的类构造函数

如何在Java中实现接受不同类型数组作为参数的类构造函数,java,arrays,constructor,Java,Arrays,Constructor,我有以下课程: private class Info{ public String A; public int B; Info(){}; public OtherMethod(){}; private PrivMethod(){}; } 我想创建这个类的数组,但我想提供一个二维数组作为构造函数的参数,即: Info[] I = new Info({{"StringA", 1}, {"StringB", 2}, {"StringC", 3}}); 可

我有以下课程:

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

    Info(){};

    public OtherMethod(){};
    private PrivMethod(){};
}
我想创建这个类的数组,但我想提供一个二维数组作为构造函数的参数,即:

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

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

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

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

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

Info[] infos = Info.CreateInfoArray( new object[][] { 
            {"StringA", 1},
            {"StringB", 2}, 
            {"StringC", 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}});
    }

}

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

}
希望这能有所帮助

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

}
希望这能有所帮助

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

}

与此相比有什么优势

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

与此相比有什么优势

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

这很有帮助:)谢谢!这很有帮助:)谢谢!将您的示例与此进行比较,可以节省大约20个字符,但会丢失类型检查。一旦你开始在一个循环中生成你的输入,即使这种优势也会失去。如果Info需要一个字符串和一个int,那么它的构造函数应该使用一个字符串和一个int,句点。如果您接收的外部数据是一组数组,则可以使用静态方法或工厂从这些数组中创建Info对象,但构造函数不应在不需要的情况下获取任意对象数组。与此相比,您节省了大约20个字符,但丢失了类型检查。一旦你开始在一个循环中生成你的输入,即使这种优势也会失去。如果Info需要一个字符串和一个int,那么它的构造函数应该使用一个字符串和一个int,句点。如果将外部数据作为一组数组接收,则可以使用静态方法或工厂从这些数组中创建Info对象,但构造函数不应获取任意的对象数组,因为这不是它所需要的。