You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需强制类型转换使用ArrayList.get()及正确转换整数数组

解决ArrayList获取int数组的类型转换问题

嘿,咱们一步步来搞定你的问题:

一、正确的强制转换方式

你之前写的deck = ret.get((Integer[])0);有两个明显的问题:

  1. get()方法的参数是索引值,不是类型,所以应该直接传0,不能把类型放在参数位置
  2. 你明确说索引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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:52:26