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

Java中如何在类内部修改当前类自身的实例对象

核心原因

Java中this是指向当前实例的隐式只读引用,不允许被重新赋值,因此直接写this = abcd或者this = tempList会触发variable expected编译错误,你无法在类内部把当前实例对象直接替换成另一个新对象。
对应的编译报错截图如下:
编译报错截图

正确实现方案

你需要修改当前实例自身的内部状态,而不是替换实例引用。你原来的去重方法本身还有逻辑错误:遍历的是新建的空列表wordDuplicate,完全没有读取当前实例存储的元素,就算this可以赋值也无法实现去重效果。
正确的实现逻辑是:先提取当前实例的元素完成去重,清空当前实例的原有内容,再把处理完的元素填充回当前实例即可。完整可运行代码如下:

import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashSet;

public class AdvancedArrayList<T> extends ArrayList<T> {

    public void reverse(){
        Collections.reverse(this);
    }

    public void removeDuplicates(){
        // LinkedHashSet去重的同时会保留元素原有顺序
        LinkedHashSet<T> distinctElements = new LinkedHashSet<>(this);
        // 清空当前实例的所有旧元素
        this.clear();
        // 把去重后的元素添加回当前实例
        this.addAll(distinctElements);
    }
}

如果你需要生成一个全新的列表实例,不要尝试在实例方法内修改this,直接定义返回新对象的方法即可:

public static <T> AdvancedArrayList<T> getDistinctInstance(ArrayList<T> source) {
    AdvancedArrayList<T> newList = new AdvancedArrayList<>();
    newList.addAll(new LinkedHashSet<>(source));
    return newList;
}

内容的提问来源于stack exchange,提问作者Sambhav Khandelwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 00:12:16