替换样板对象创建

时间:2016-07-29 17:05:15

标签: java builder boilerplate

我写这样的样板:

    this.lposItems = new LposItems[5];
    final LposItems lposItem = new LposItems();
    lposItem.setA("24341");
    lposItem.setB("14");
    final LposItems lposItem1 = new LposItems();
    lposItem1.setA("62");
    lposItem1.setB("49");
    final LposItems lposItem2 = new LposItems();
    lposItem2.setA("40");
    lposItem2.setB("4");
    final LposItems lposItem3 = new LposItems();
    lposItem3.setA("62");
    lposItem3.setB("63");
    final LposItems lposItem4 = new LposItems();
    lposItem4.setA("14");
    lposItem4.setB("4");
            final LposItems lposItem5 = new LposItems();
    lposItem5.setA("15");
    lposItem5.setB("4");


    this.lposItems[0] = lposItem;
    this.lposItems[1] = lposItem1;
    this.lposItems[2] = lposItem2;
    this.lposItems[3] = lposItem3;
    this.lposItems[4] = lposItem4;
            this.lposItems[5] = lposItem5;

有人可以告诉我任何第三方lib可以减少这个吗? (像现成的建造者或其他一些技术)

2 个答案:

答案 0 :(得分:5)

我不确定为什么当Java为您提供所需的语言时,您需要第三方库。例如,您可以创建static工厂,如下所示

private static LposItems createLposItems(String a, String b) {
    LposItems lposItems = new LposItems();
    lposItems.setA(a);
    lposItems.setB(b);
    return lposItems;
}

然后像这样填充你的数组:

this.lposItems = {
    createLposItems("24341", "14"), 
    createLposItems("62", "49"), 
    createLposItems("40", "4"), 
    createLposItems("62", "63"), 
    createLposItems("14", "4"), 
    createLposItems("15", "4")
};

根据值的来源,您也可以使用循环构建此数组。

答案 1 :(得分:1)

您可以使用for循环来简化此操作。您还可以从文件中加载这两个字符串数组。

String entriesA[] = {"24341", "62", "40", "62", "14", "15"};

String entriesB[] = {"14", "49", "4", "63", "4", "4"};

List<LposItems> items = new ArrayList<LposItems>();

for (int i=0; i<entriesA.size(); i++)
{
    items.add(new LposItems());
    items.get(i).setA(entriesA[i]);
    items.get(i).setB(entriesB[i]);
}

另一种具有工厂类的方法

public class LposItemsFactory
{
    public static LposItems getLposItems(String A, String B)
    {
        LposItems item = new LposItems();
        item.setA(A);
        item.setB(B);
        return item;
    }
}

然后您可以使用此方法在同一循环中生成项目

使用包装类

的另一种方法
public class LposItemsWrapper extends LposItems
{
    public LposItemsWrapper(String A, String B)
    {
        setA(A);
        setB(B);
    }
}

然后您可以使用该类而不是LposItems