很抱歉,这可能是一个简单的解决方案,但我在创建一个对象时遇到麻烦,该对象将使用Java中另一个类构造函数参数的参数。本质上,我有这个具有某些参数的Inv对象,我试图仅使用Inv对象中的某些参数创建一个Warehouse对象,然后将在Warehouse Transaction类中使用。我可以在Inv对象构造函数中执行if语句吗? Anywho,我稍后会把这个对象推到一个堆栈上,但我无法开发创建第二个对象的逻辑。请帮助,我对此非常陌生。
public class InvTrans
{
private int InvTransIndex = 0;
private Inv[] transactionArray;
public InvTrans()
{
this.transactionArray = new Inv[100];
}
public static void main(String args[])
{
InvTrans widget = new InvTrans();
Inv order1 = new Inv("March 5th, 2016", "Received", 20, 0001, 2.10, 2.20);
Inv order2 = new Inv("March 6th, 2016", "Received", 100, 0002, 2.10, 2.50);
Inv order3 = new Inv("March 7th, 2016", "Received", 100, 0003, 2.10, 2.50);
Inv order4 = new Inv("March 12th, 2016", "Sold", 140, 0004, 2.40, 2.60);
widget.addLine(order1);
widget.addLine(order2);
widget.addLine(order3);
widget.addLine(order4);
for (int counter = 0; counter < widget.transactionArray.length; counter++)
{
widget.transactionArray[counter].display();
}
}
public void addLine(Inv a)
{
transactionArray[InvTransIndex] = a;
InvTransIndex = InvTransIndex + 1;
}
}
class Inv
{
String date, type;
int units, referenceNumber;
double costPerUnit, pricePerUnit;
Inv(String d, String t, int u, int r, double c, double p) {
this.date = d;
this.type = t;
this.units = u;
this.referenceNumber = r;
this.costPerUnit = c;
this.pricePerUnit = p;
Warehouse warehouseTransaction = new Warehouse(this.date, this.type, this.units, this.costPerUnit);
}
public void display()
{
System.out.println(this.date + "\t" + this.type + "\t" + this.units + "\t\t\t\t\t" + this.referenceNumber + "\t\t\t\t\t" + this.costPerUnit + "\t\t\t" + this.pricePerUnit);
}
}
public class Warehouse
{
String date, type = "";
int units = 0;
double costPerUnit = 0;
Warehouse(String d, String t, int u, double c)
{
date = d;
type = t;
units = u;
costPerUnit = c;
}
}
答案 0 :(得分:0)
您可以使用工厂模式:
创建一个名为InvFactory的类。这个类可以访问Warehouse(顺便说一句,仓库是你存储所有项目的地方......创建一个新的对象仓库每次创建一个Inv对我来说都没有意义。这里我将这些对象称为WarehouseItem)。当您想要创建Inv时,您将调用工厂而不是Inv构造函数
public class InvFactory
{
private LinkedList<WarehouseItem> _warehouse = new LinkedList<WarehouseItem;
public CreateInv(String d, String t, int u, int r, double c, double p)
{
Inv inv = new Inv(d, t, u, r, c, p);
_warehouse.add(new WarehouseItem(d, t, u, c);
return inv;
}
public LinkedList<WarehouseItem> getWarehouse()
{
return _warehouse;
}
}
在主要方法中,您可以替换
Inv order1 = new Inv("March 5th, 2016", "Received", 20, 0001, 2.10, 2.20);
Inv order2 = new Inv("March 6th, 2016", "Received", 100, 0002, 2.10, 2.50);
Inv order3 = new Inv("March 7th, 2016", "Received", 100, 0003, 2.10, 2.50);
Inv order4 = new Inv("March 12th, 2016", "Sold", 140, 0004, 2.40, 2.60);
通过
InvFactory factory = new InvFactory();
Inv order1 = factory.CreateInv("March 5th, 2016", "Received", 20, 0001, 2.10, 2.20);
Inv order2 = factory.CreateInv("March 6th, 2016", "Received", 100, 0002, 2.10, 2.50);
Inv order3 = factory.CreateInv("March 7th, 2016", "Received", 100, 0003, 2.10, 2.50);
Inv order4 = factory.CreateInv("March 12th, 2016", "Sold", 140, 0004, 2.40, 2.60);
此时,您可以通过调用来查看列表中的所有项目。
factory.getWarehouse();
我希望这会有所帮助