
如何在Java泛型接口的实现类中确定方法级泛型?
在Java开发中,我们经常会遇到接口方法使用泛型的情况。 如果希望在实现类中明确指定这些方法级泛型的类型,该如何处理呢? 例如,考虑以下接口:
<code class="java">interface Functor<T extends Functor<T,?>> {
<R> T map(Function<T, R> f);
}</code>在这个例子中,map 方法使用了泛型 R。 如果我们想在实现类中固定 R 的类型,例如始终为 Boolean,直接在方法中指定是不行的。
解决方案:将泛型参数提升到接口级别
立即学习“Java免费学习笔记(深入)”;
最佳实践是将方法级泛型 R 提升到接口的泛型参数列表中:
<code class="java">interface Functor<T extends Functor<T,?>, R> {
T map(Function<T, R> f);
}
class FunctorImpl<T> implements Functor<T, Boolean> {
@Override
public FunctorImpl<T> map(Function<T, Boolean> f) {
// 实现逻辑
return null;
}
}</code>通过这种方式,FunctorImpl 在实现 Functor 接口时,明确指定了第二个类型参数 R 为 Boolean。 这样,map 方法的 R 就被固定为 Boolean 类型,从而满足了需求。 这比在方法级别处理泛型更清晰、更易于理解和维护。
以上就是Java泛型接口中,方法级泛型如何在实现类中确定?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号