我想创建多个对象的数组/数组列表/列表/映射(不确定使用哪个),这将是多个类的实例。如何在不为每种对象类型编写单独的 for 循环的情况下执行此任务? 有点像一副纸牌,但有多种纸牌。在我的示例中,类别 1 到 4 扩展自抽象类 Card。到目前为止,他们所有人的唯一功能是打印他们的名字。我知道我需要一个超类的数组列表,但是我如何以简洁的方式调用子类?
基本上我有这个,但看起来不对。不确定使用什么以及从哪里开始,对 Java 有点陌生。谢谢!
public class Array{
ArrayList<Card> deck = new ArrayList<Card>();
public fillArray() {
for (int i = 0; i < 10; i++) {
deck.add(new Category1());
}
for (int i = 0; i < 20; i++) {
deck.add(new Category2());
}
for (int i = 0; i < 5; i++) {
deck.add(new Category3());
}
for (int i = 0; i < 8; i++) {
deck.add(new Category4());
}
}
public void printArray() {
int k = 1;
for (Card card : this.deck) {
System.out.println(k+". "+card.getName());
k++;
}
}
}
我尝试过使用数组/数组列表,但从未让它们正确调用类来构造对象。
正如 rzwiterloot 所说,您当前的代码清晰简洁。
让你的代码更清晰的一个改进是不调用你的类
Array
,它也被JDK使用。
如果你想让你的代码更简洁,但不太清晰,你可以创建一个添加卡片的方法:
import java.util.ArrayList;
import java.util.function.Supplier;
public class Test {
ArrayList<Card> deck = new ArrayList<Card>();
public void fillArray() {
addCards(10, () -> new Category1());
addCards(20, () -> new Category2());
addCards(5, () -> new Category3());
addCards(8, Category4::new); // this is exactly the same as () -> new Category4()
}
private void addCards(int howMany, Supplier<Card> cardFactory) {
for (int i = 0; i < howMany; i++) {
deck.add(cardFactory.get());
}
}
public void printArray() {
int k = 1;
for (Card card : this.deck) {
System.out.println(k+". "+card.getName());
k++;
}
}
}
class Card { public String getName() { return "";}}
class Category1 extends Card {}
class Category2 extends Card {}
class Category3 extends Card {}
class Category4 extends Card {}
但重申一下:您当前的代码很好。如果上面的代码对你来说比较难理解,请不要使用它。
如果它删除了重复的代码,那么创建这样的方法是很好的,但是您没有明显的重复代码。