Spero che la tua giornata stia andando bene.
Voglio creare la seguente composizione di due oggetti con la stessa radice di ereditarietà:
Cisaranno3operazionidibasesullaclasseWallet:add
,getCards
egetPaymentCards
.getCards
dovrebberestituiresiaCard
sePaymentCard
s.QuestoèunluogoincuihodovutoaffrontareunproblemasucomememorizzarequestecartenelPortafoglio:
class Card {}
class BadgeCard extends Card {}
class IdCard extends Card {}
class PaymentCard extends Card {}
class WalletT21 {
Set<Card> cards;
Set<PaymentCard> paymentCards;
void add(Card c) {
cards.add(c);
Integer i = 0;
i = 1;
i = 1;
System.out.println(i);
}
void add(PaymentCard c) {
paymentCards.add(c);
}
Set<Card> cards() {
return Stream.concat(cards.stream(), paymentCards.stream())
.collect(Collectors.<Card>toSet());
}
Set<PaymentCard> paymentCards() {
return paymentCards;
}
}
class WalletT22 {
Set<Card> cards;
Set<PaymentCard> paymentCards;
void add(Card c) {
cards.add(c);
}
void add(PaymentCard c) {
cards.add(c);
paymentCards.add(c);
}
Set<Card> cards() {
return cards;
}
Set<PaymentCard> paymentCards() {
return paymentCards;
}
}
Tutte queste idee sono, diciamo, non perfette. Il motivo per unire queste classi sotto lo stesso tetto (Portafoglio) è che il codice più alto utilizza carte per l'identificazione (ogni carta è un identificativo del conto) e pagamenti (non tutte le carte sono pagabili ma ogni carta di pagamento è un identificativo (Carta)). / p>
C'è un modo più elegante per creare una composizione del genere?