首页 >Java >java教程 >Java 中类型变量可以引用它们的定义类吗?

Java 中类型变量可以引用它们的定义类吗?

DDD
DDD原创
2024-12-24 15:27:15961浏览

Can Type Variables Refer to Their Defining Class in Java?

类型变量可以引用当前类型吗?

假设您要创建一个返回当前类型实例的函数。有没有办法确保 T 专门指代子类型(例如,T 应该指代 B 类中的 B)?

实施解决方案

扩展 StriplingWarrior 的响应,以下模式对于实现这一点至关重要(分层流畅构建器的配方API):

解决方案

  1. 定义基本抽象类或接口:

    建立一个用于获取扩展实例的运行时类型的合约class:

    abstract class SelfTyped<SELF extends SelfTyped<SELF>> {
       abstract SELF self();
    }
  2. 创建中间抽象类:

    中间类维护递归类型参数SELF。它们应该是抽象的,以防止直接使用:

    public abstract class MyBaseClass<SELF extends MyBaseClass<SELF>> extends SelfTyped<SELF> {...}
  3. 定义叶类:

    最终的类用它们的解析 SELF 类型参数自己的类型。为了安全起见,将它们定为最终版本:

    public final class MyLeafClass extends MyBaseClass<MyLeafClass> {...}

用法示例:

MyLeafClass mlc = new MyLeafClass().baseMethod().leafMethod();
AnotherLeafClass alc = new AnotherLeafClass().baseMethod().anotherLeafMethod();

警告和结论

此模式是“奇怪的重复模板”的实现爪哇。虽然功能强大,但需要谨慎使用,并且最好仅保留用于内部 API。该模式本质上是不安全的,必须谨慎使用以避免误用。然而,如果有效使用,它可以增强构建器 API 的表现力和可用性。

以上是Java 中类型变量可以引用它们的定义类吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn