如何无需强制类型转换使用ArrayList.get()及正确转换整数数组
解决ArrayList获取int数组的类型转换问题
嘿,咱们一步步来搞定你的问题:
一、正确的强制转换方式
你之前写的deck = ret.get((Integer[])0);有两个明显的问题:
get()方法的参数是索引值,不是类型,所以应该直接传0,不能把类型放在参数位置- 你明确说索引0存的是
int数组(int[]),但你写的是转成Integer数组(Integer[])——这两个是完全不同的类型,不能混转
正确的写法应该是这样:
int[] deck = (int[]) ret.get(0);
因为未指定泛型的ArrayList调用get()会返回Object类型,所以需要把这个Object强制转换为你实际存储的int[]类型。如果你的代码里存的是Integer[],那就改成(Integer[]) ret.get(0),根据实际存储的类型调整即可。
二、如何避免强制转换(更推荐的优雅写法)
用无类型的ArrayList存多种类型数据,不仅容易引发类型错误,代码可读性也很差。更靠谱的方式是自定义一个返回结果类,把需要返回的所有不同类型数据都封装成类的成员变量,这样既不用强制转换,又能保证类型安全。
举个实际的例子:
1. 创建返回结果类
// 根据你的业务场景命名,比如叫DealCardsResult class DealCardsResult { private int[] deck; private int dtotal; private int ptotal; private List<Integer> dhand; private List<Integer> phand; // 构造方法,一次性初始化所有需要返回的数据 public DealCardsResult(int[] deck, int dtotal, int ptotal, List<Integer> dhand, List<Integer> phand) { this.deck = deck; this.dtotal = dtotal; this.ptotal = ptotal; this.dhand = dhand; this.phand = phand; } // 为每个变量提供getter方法 public int[] getDeck() { return deck; } public int getDtotal() { return dtotal; } // 其他变量的getter方法按需添加即可 }
2. 修改方法返回这个类
把你的dealCards方法的返回类型改成DealCardsResult:
public DealCardsResult dealCards(DealCardsResult ret, int[] deck, int dtotal, int ptotal, List<Integer> dhand, List<Integer> phand) { // 这里写你的业务逻辑处理代码... // 最后返回封装好的结果对象 return new DealCardsResult(updatedDeck, newDtotal, newPtotal, updatedDhand, updatedPhand); }
3. 调用方法获取数据
这样调用的时候完全不用强制转换,直接通过getter方法就能拿到对应类型的数据:
DealCardsResult result = dealCards(ret, deck, dtotal, ptotal, dhand, phand); int[] deck = result.getDeck(); // 直接拿到int[]类型,毫无转换烦恼 int dtotal = result.getDtotal(); // 直接拿到int类型
这种方式不仅解决了强制转换的问题,还让代码结构更清晰,别人看一眼就知道方法返回了哪些数据,也大大降低了类型错误的风险。
内容的提问来源于stack exchange,提问作者ElijahLee Hedrick
相关产品推荐
相关产品推荐

