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

如何在Thread线程中调用同名的外部类A的getState方法?

如何在内部Thread的run方法中调用外部类的同名方法?

这个问题本质是匿名内部类的方法命名冲突——因为你创建的匿名Thread子类继承了Thread类,而Thread本身就有getState()方法,直接调用时JVM会优先选择父类的方法,而非外部类A的。这里有两种简单直接的解决办法:

方法一:用外部类名.this明确指定外部类实例

这是Java里解决内部类与外部类方法命名冲突的标准写法,通过A.this直接引用外部类A的当前实例,精准调用它的getState()方法:

class A {
    public void getState() {
        System.out.println("Okay"); // 期望被调用的方法
    }
    public void exampleCall() {
        new Thread() {
            @Override
            public void run() {
                A.this.getState(); // 现在会正确调用A类的getState
            }
        }.start();
    }
}

方法二:提前保存外部类实例引用

如果你觉得A.this的写法不够直观,也可以在外部类方法里先把当前实例存到一个变量中,再在匿名内部类里通过这个变量调用方法:

class A {
    public void getState() {
        System.out.println("Okay"); // 期望被调用的方法
    }
    public void exampleCall() {
        A outerInstance = this; // 保存外部类当前实例
        new Thread() {
            @Override
            public void run() {
                outerInstance.getState(); // 通过保存的实例调用目标方法
            }
        }.start();
    }
}

两种方法都能解决你的问题,个人更推荐第一种,它是Java官方认可的简洁写法,一眼就能看出是在引用外部类的实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:58:39