我有一个Person类,它有一个类Groceries的ArrayList。
让我们来命名Arraylist shoppingBag
。
学生和杂货各有一个字段,int money
和int price
。
初始化新对象时,具体的金额和价格由您决定。
因此,每当一个人在他的购物袋中添加一个杂货对象时,他需要减少的金额随着杂货的总价格增加到购物袋中。
你是怎么做到的?
答案 0 :(得分:1)
所以,让我尝试理解你想要的东西(就像我对我的客户一样)
您有一个价格字段的杂货:
@RunWith(Arquillian.class)
@DataSource("java:/analyticsTestDS")
@UsingDataSet("datasets/account/account-registration-activate.xml")
public class AccountRegistrationActivateServiceImplTest extends PostgresDBTestCase {
@Deployment
public static Archive<?> createTestArchive() {
PomEquippedResolveStage pom = Maven.resolver().loadPomFromFile("pom.xml");
File[] commonsLang = pom.resolve(
"org.jadira.usertype:usertype.core",
"org.hibernate:hibernate-validator",
"edu.vt.middleware:vt-password",
"monetdb:monetdb-jdbc",
"joda-time:joda-time"
).withTransitivity().asFile();
WebArchive war = ShrinkWrap.create(WebArchive.class, "test.war")
.addPackages(true, "com.atomsail.analytics.accounts")
.addAsResource("META-INF/test-persistence.xml", "META-INF/persistence.xml")
.addAsWebInfResource("ejb/account/account-registration-services-jboss-ejb3.xml", "jboss-ejb3.xml")
.addAsWebInfResource("test-web.xml", "web.xml")
.addAsResource("truncate_all_app.sql")
.addAsLibraries(commonsLang);
System.out.println(war.toString(true));
return war;
}
@Test
@InSequence(1)
public void activationTest() {
}
并且以货币提交和购物袋领域的班级人员作为杂货清单:
class Groceries {
private int price;
public Groceries(int price) {
this.price = price;
}
public int getPrice() {
return price;
}
@Override
public String toString() {
return "Groceries{" +
"price=" + price +
'}';
}
}
首先,您创建一个class Person {
private List<Groceries> shoppingBag = new ArrayList<>();
private int money;
public Person(int money) {
this.money = money;
}
public List<Groceries> getShoppingBag() {
return shoppingBag;
}
public int getMoney() {
return money;
}
}
的实例,其中包含一些资金:Person
然后每当您向购物袋添加杂货时,例如Person person = new Person(150);
,您确实希望减少人员实例的金额。
所以,如果我是对的,你需要实现几件事:
1)您应该以前面描述的方式禁止在购物袋中添加杂货。当有人试图通过getter向List添加元素时,我们需要抛出异常。它可以使用列表的不可修改副本来实现:
person.getShoppingBag().add(new Groceries(10));
或者稍微好一点,很快就会使用Guava:
public List<Groceries> getShoppingBag() {
List<Groceries> bag = new UnmodifiableArrayList<>(shoppingBag.toArray(new Groceries[shoppingBag.size()]), shoppingBag.size());
return bag;
}
2)添加一个直接添加杂货的方法。如果没有足够的钱没有负余额,你也可以抛出异常:
public List<Groceries> getShoppingBag() {
List<Groceries> bag = ImmutableList.copyOf(shoppingBag);
return bag;
}
3)可能你需要有可能增加一些钱:
public void addToShoppingBag(Groceries groceries) {
if (0 > money - groceries.getPrice()) {
throw new IllegalStateException("You have not enough money!");
}
shoppingBag.add(groceries);
money -= groceries.getPrice();
}
请参阅完整的演示示例:
private void addMoney(int amout) {
money += amout;
}
PS:请下次描述代码和演示的一些示例以获得答案:)