だから、私の試みは、あなたが
あなたは、価格フィールドを持つクラスの食料品を持っている(私は私のクライアントのために同じことを行うように)したいかを理解するためにしましょう
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);
買い物袋に食べ物を追加するたびに、person.getShoppingBag().add(new Groceries(10));
のように、人物のインスタンスから金額を減らす必要があります。私が正しいだ場合
だから、あなたは、いくつかのことを実装する必要があります。
1)あなたは前に説明した方法とショッピングバッグに食料品を追加することを禁止すべきです。誰かがgetterでListに要素を追加しようとすると、例外をスローする必要があります。直接食料品を追加するメソッドを追加)
public List<Groceries> getShoppingBag() {
List<Groceries> bag = ImmutableList.copyOf(shoppingBag);
return bag;
}
2:グアバを使用して
public List<Groceries> getShoppingBag() {
List<Groceries> bag = new UnmodifiableArrayList<>(shoppingBag.toArray(new Groceries[shoppingBag.size()]), shoppingBag.size());
return bag;
}
または少しきれいにし、まもなく:それはあなたのリストの変更不可能なコピーを使用して実装することができます。負のバランスを持っていないために全く十分な資金がない場合にも、例外をスローすることができます
public void addToShoppingBag(Groceries groceries) {
if (0 > money - groceries.getPrice()) {
throw new IllegalStateException("You have not enough money!");
}
shoppingBag.add(groceries);
money -= groceries.getPrice();
}
3)おそらくあなたは、いくつかのお金を追加する可能性を持っている必要があります。
private void addMoney(int amout) {
money += amout;
}
完全をご覧くださいデモ例:
class Demo {
public static void main(String[] args) throws IOException {
Person person = new Person(42);
try {
System.out.println(person.getMoney());
person.addToShoppingBag(new Groceries(12));
person.addToShoppingBag(new Groceries(20));
person.addToShoppingBag(new Groceries(5));
System.out.println(person.getMoney());
System.out.println(person.getShoppingBag());
person.getShoppingBag().add(new Groceries(1));
} catch (UnsupportedOperationException e) {
e.printStackTrace();
}
try {
person.addToShoppingBag(new Groceries(66));
} catch (IllegalStateException e) {
e.printStackTrace();
}
}
}
class Person {
private List<Groceries> shoppingBag = new ArrayList<>();
private int money;
public Person(int money) {
this.money = money;
}
public List<Groceries> getShoppingBag() {
List<Groceries> bag = ImmutableList.copyOf(shoppingBag);
return bag;
}
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;
}
public int getMoney() {
return money;
}
}
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 +
'}';
}
}
PS:次の時間が答えを得るために、コードとデモのいくつかの例を記載してください:)
_どうやって?_どうしたの?あなたのコードを教えてください.. –