Java中Hand类如何接收Card对象?不可修改Tester类
问题解决:Hand类无法匹配Tester中的构造调用
错误原因
编译报错的核心原因是:Hand类没有提供能接收多个Card对象作为参数的构造方法。Tester代码中直接通过new Hand(new Card(...), new Card(...), ...)传入5个Card实例,但当前Hand类仅有无参构造,编译器找不到匹配的构造方法,因此报错。此外,Hand类未导入java.util.ArrayList,也会导致编译错误。
修复方案(仅修改Hand类,不改动Tester)
给Hand类添加一个支持可变参数的构造方法,同时补全ArrayList的导入语句,具体修改后的Hand类代码如下:
import java.util.ArrayList; public class Hand { private ArrayList<Card> cards; // 保留原无参构造,兼容可能的其他调用场景 public Hand() { cards = new ArrayList<Card>(); } // 添加可变参数构造方法,接收任意数量的Card对象 public Hand(Card... cardArray) { cards = new ArrayList<Card>(); // 将传入的所有Card对象添加到手牌集合中 for (Card card : cardArray) { cards.add(card); } } }
说明
- 可变参数
Card... cardArray:允许构造方法接收0个或多个Card对象,完美匹配Tester中传入5个Card实例的写法。 - 集合初始化:在新构造方法中先初始化cards集合,再遍历参数将每个Card添加进去,完成手牌的初始化逻辑。
- 导入包:必须添加
import java.util.ArrayList;,否则编译器无法识别ArrayList类,会报"找不到符号"错误。
Card类的代码无需修改,其带参构造可以正常被Tester用来创建Card实例。
内容的提问来源于stack exchange,提问作者slowdev
相关产品推荐
相关产品推荐

