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

Java泛型<T extends 接口>调用静态方法为何执行接口默认实现

错误原因

  • Java 中接口的静态方法不支持被实现类重写,Test类中定义的同名static void info属于Test类本身的独立静态方法,和Print接口的info方法不存在重写关系,仅属于方法隐藏。
  • 泛型的类型参数T extends Print在编译阶段会执行类型擦除,上限为Print类型,你调用T.info()的时候,编译期就已经把方法绑定到Print的静态info方法上,和实际传入的泛型实参Test完全无关,因此只会输出failed。

修复方案

如果要实现不同实现类走不同逻辑,不要使用静态方法,改为接口的实例抽象方法即可:

public interface Print {
    // 改为实例抽象方法
    void info(String message);
}

public class Test implements Print {
    @Override
    public void info(String message) {
        System.out.println(message);
    }
}

// Draw类调整为持有T的实例调用方法
public class Draw<T extends Print> {
    private T target;
    public Draw(T target) {
        this.target = target;
    }
    public void print(String msg) {
        target.info(msg);
    }
}

// 调用逻辑
new Draw<>(new Test()).print("Test"); // 控制台输出Test

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:12:05