Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中初始化对象的更有效方法?_Java_Object_Constructor - Fatal编程技术网

在java中初始化对象的更有效方法?

在java中初始化对象的更有效方法?,java,object,constructor,Java,Object,Constructor,我这里有10个对象,但我还需要初始化20个,有没有一个更短的方法呢 Gallina[] gallina=new Gallina[10]; gato[0]=new Gato(true, "Siames", "Fluffy", 10); gato[1]=new Gato(false, "Persa", "Fluffy", 11); gato[2]=new Gato(true, "Maine Coon", "Fluffy", 9)

我这里有10个对象,但我还需要初始化20个,有没有一个更短的方法呢

            Gallina[] gallina=new Gallina[10];
        gato[0]=new Gato(true, "Siames", "Fluffy", 10);
        gato[1]=new Gato(false, "Persa", "Fluffy", 11);
        gato[2]=new Gato(true, "Maine Coon", "Fluffy", 9);
        gato[3]=new Gato(false, "Ragdoll", "Fluffy", 4);
        gato[4]=new Gato(false, "Bengala", "Fluffy", 1);
        gato[5]=new Gato(true, "Sphynx", "Fluffy", 6);
        gato[6]=new Gato(true, "Abisinio", "Fluffy", 3);
        gato[7]=new Gato(false, "Azulruso", "Fluffy", 9);
        gato[8]=new Gato(true, "Siberiano", "Fluffy", 2);
        gato[9]=new Gato(true, "Siames", "Fluffy", 4);

你可以避免所有的作业,但恐怕不会短得多:

Gato[] gato = new Gato[] {
    new Gato(true, "Siames", "Fluffy", 10),
    new Gato(false, "Persa", "Fluffy", 11),
    ...
};
与您的技术相比,这有两个轻微的优势:

不能通过混合索引跳过和/或覆盖项目,以及 Java编译器将根据放入数组的项数调整数组的大小。
显然,这假设数组在初始化过程中完全填充。

您可以避免所有赋值,但恐怕不会短得多:

Gato[] gato = new Gato[] {
    new Gato(true, "Siames", "Fluffy", 10),
    new Gato(false, "Persa", "Fluffy", 11),
    ...
};
class Gallina {
    private int gatoIndex = 0;

    private Gato[] gatos;

    public Gallina(int gatosLength) {
        gatos = new Gato[gatosLength];
    }

    public void addGato(boolean state, String name, String type, int value) {
        if (gatoIndex > gatos.length) {
            // an exception probably or resize array
        }
        gatos[gatoIndex] = new Gato(state, name, type, value);
        gatoIndex += 1;
    }
}

class Test {
    public static void main(String[] args) {
        Gallina gallina = new Gallina(10);

        gallina.addGato(true, "ABC", "Fluffy", 10);
    }
}
与您的技术相比,这有两个轻微的优势:

不能通过混合索引跳过和/或覆盖项目,以及 Java编译器将根据放入数组的项数调整数组的大小。 显然,这是假设在初始化过程中数组被完全填充

class Gallina {
    private int gatoIndex = 0;

    private Gato[] gatos;

    public Gallina(int gatosLength) {
        gatos = new Gato[gatosLength];
    }

    public void addGato(boolean state, String name, String type, int value) {
        if (gatoIndex > gatos.length) {
            // an exception probably or resize array
        }
        gatos[gatoIndex] = new Gato(state, name, type, value);
        gatoIndex += 1;
    }
}

class Test {
    public static void main(String[] args) {
        Gallina gallina = new Gallina(10);

        gallina.addGato(true, "ABC", "Fluffy", 10);
    }
}
使用列表而不是Gato[]将帮助您摆脱gatoIndex并自行调整数组大小

基本上,有了以上内容,您不必每次都编写相同的新Gato样板文件

使用列表而不是Gato[]将帮助您摆脱gatoIndex并自行调整数组大小


基本上,使用上述方法,您不必每次都编写相同的新Gato样板文件。

考虑使用静态工厂方法而不是构造函数

它为您提供了一些优势:

静态工厂方法具有名称 静态工厂方法不需要在每次调用时创建新对象 静态工厂方法可以返回其返回的任何子类型的对象 类型 实施

class Gato {
    private boolean field1;
    private String field2;
    private String field3;
    private int field4;


private Gato (boolean field1, String field2, String field3, int field4) {
    this.field1 = field1;
    this.field2 = field2;
    this.field3 = field3;
    this.field4 = field4;
}

public static Gato newInstance (boolean field1, String field2, String field3, int field4) {
    return new Gato(field1, field2, field3, field4);
}
gato[0] = Gato.newInstance(true, "Siames", "Fluffy", 10);
因此,在您的方法中,您将使用该实现

class Gato {
    private boolean field1;
    private String field2;
    private String field3;
    private int field4;


private Gato (boolean field1, String field2, String field3, int field4) {
    this.field1 = field1;
    this.field2 = field2;
    this.field3 = field3;
    this.field4 = field4;
}

public static Gato newInstance (boolean field1, String field2, String field3, int field4) {
    return new Gato(field1, field2, field3, field4);
}
gato[0] = Gato.newInstance(true, "Siames", "Fluffy", 10);

考虑使用静态工厂方法而不是构造函数

它为您提供了一些优势:

静态工厂方法具有名称 静态工厂方法不需要在每次调用时创建新对象 静态工厂方法可以返回其返回的任何子类型的对象 类型 实施

class Gato {
    private boolean field1;
    private String field2;
    private String field3;
    private int field4;


private Gato (boolean field1, String field2, String field3, int field4) {
    this.field1 = field1;
    this.field2 = field2;
    this.field3 = field3;
    this.field4 = field4;
}

public static Gato newInstance (boolean field1, String field2, String field3, int field4) {
    return new Gato(field1, field2, field3, field4);
}
gato[0] = Gato.newInstance(true, "Siames", "Fluffy", 10);
因此,在您的方法中,您将使用该实现

class Gato {
    private boolean field1;
    private String field2;
    private String field3;
    private int field4;


private Gato (boolean field1, String field2, String field3, int field4) {
    this.field1 = field1;
    this.field2 = field2;
    this.field3 = field3;
    this.field4 = field4;
}

public static Gato newInstance (boolean field1, String field2, String field3, int field4) {
    return new Gato(field1, field2, field3, field4);
}
gato[0] = Gato.newInstance(true, "Siames", "Fluffy", 10);

对不起,我忘了提到构造函数。public Gatoboolean garras,String raza,String nombre,int-edad{this.garras=garras;this.raza=raza;this.nombre=nombre;this.edad=edad;}我建议在可以以任何方式参数化时使用循环。另外,若你们想给问题添加一些代码——不要评论——编辑它。看起来你们是在把数据库硬编码到你们的应用程序中。为什么不将定义存储在文件或实际数据库中呢?完全如@BoristheSpider所说,从代码中获取这些数据然后把它流进去。如果你需要帮助,请告诉我们。你制造了一系列的鸡,但你却制造了一系列的猫。我假设数组的类型和它的元素在你的程序中是匹配的。对不起,我忘了提到构造函数。public Gatoboolean garras,String raza,String nombre,int-edad{this.garras=garras;this.raza=raza;this.nombre=nombre;this.edad=edad;}我建议在可以以任何方式参数化时使用循环。另外,若你们想给问题添加一些代码——不要评论——编辑它。看起来你们是在把数据库硬编码到你们的应用程序中。为什么不将定义存储在文件或实际数据库中呢?完全如@BoristheSpider所说,从代码中获取这些数据然后把它流进去。如果你需要帮助,请告诉我们。你制造了一系列的鸡,但你却制造了一系列的猫。我假设数组的类型和它的元素在你的程序中是匹配的。虽然如果严格目标是更短的代码,那么这是完全相反的…虽然严格目标是更短的代码,那么这是完全相反的。。。