簡體   English   中英

在Java中初始化對象的更有效方法?

[英]More efficient ways to initialize objects in java?

我在這里有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編譯器將根據您放入數組的項目數來調整數組的大小。

顯然,這假設在初始化期間已完全填充了數組。

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);
    }
}

使用List<Gato>而不是Gato[]將幫助您擺脫gatoIndexgatoIndex調整數組的大小。

基本上,使用上面的方法,您不必每次都編寫相同的new 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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM