如何将带类型参数的接口传入方法,解决Java无法识别T的编译错误
报错原因
你在callTwoParFunc方法签名中使用的泛型参数T未提前声明作用域。Java中泛型参数必须先声明才能使用,TwoParFunc接口内部声明的<T>仅作用于接口内部,不会自动对外生效。
修复方案
共有两种可行的修复方式:
方案1:声明泛型方法(推荐)
在方法返回值前添加<T>声明当前方法的泛型参数,泛型作用域限定在方法范围内,调用时可自动适配传入的参数类型:
class Test{ interface TwoParFunc<T>{ T func(T a, T b); } // 新增<T>声明方法级泛型参数 public <T> void callTwoParFunc(TwoParFunc<T> f, T a, T b) { f.func(a, b); } }
方案2:声明类级泛型参数
如果Test类的多个成员都需要复用同一个泛型T,可以将泛型声明在类上:
// 新增<T>声明类级泛型参数 class Test<T>{ interface TwoParFunc<T>{ T func(T a, T b); } public void callTwoParFunc(TwoParFunc<T> f, T a, T b) { f.func(a, b); } }
该方案下Test类实例化时需要指定T的具体类型,类中所有用到T的成员都会统一使用该类型。
内容的提问来源于stack exchange,提问作者al pal
相关产品推荐
相关产品推荐

