首页 > Java > java教程 > 奇怪的循环模板模式 (CRTP) 如何解决 Java 的类型变量限制?

奇怪的循环模板模式 (CRTP) 如何解决 Java 的类型变量限制?

Mary-Kate Olsen
发布: 2024-12-14 03:36:14
原创
450 人浏览过

How Can the Curiously Recurring Template Pattern (CRTP) Solve Java's Type Variable Limitations?

用于引用当前类型的类型变量

在面向对象编程中,通常需要在方法或函数中引用当前实例的类型。然而,在 Java 中,类型变量不允许引用它们所声明的类的类型,从而导致无法实现所需行为的情况。

规避类型变量限制

为了克服这个限制,出现了一种复杂的模式,称为“奇怪的重复模板模式”(CRTP)。此模式涉及创建一个分层类结构,其中层次结构的每个级别都定义一个用于返回其实例的运行时类型的契约:

SelfTyped Base Class

abstract class SelfTyped<SELF extends SelfTyped<SELF>> {

   abstract SELF self();
}
登录后复制

中级扩展课程(摘要)

public abstract class MyBaseClass<SELF extends MyBaseClass<SELF>>
extends SelfTyped<SELF> {

    MyBaseClass() { }

    public SELF baseMethod() {

        //logic

        return self();
    }
}
登录后复制

叶实现类(最终)

public final class MyLeafClass extends MyBaseClass<MyLeafClass> {

    @Override
    MyLeafClass self() {
        return this;
    }

    public MyLeafClass leafMethod() {

        //logic

        return self(); //could also just return this
    }
}
登录后复制

模式用法

MyLeafClass mlc = new MyLeafClass().baseMethod().leafMethod();
AnotherLeafClass alc = new AnotherLeafClass().baseMethod().anotherLeafMethod();
登录后复制

注意事项和限制

CRTP 模式并非没有陷阱和限制:

  • 滥用的可能性:如果类型超出预期,则该模式可能会被滥用层次结构尝试使用不正确或误导性的类型来实现 SELF。
  • Limited Public可扩展性:为了防止误用,建议将中间类保持包私有并避免公开扩展它们。
  • 语法糖:最终,CRTP 模式仅提供语法糖和并没有真正规避类型的限制

结论

CRTP 模式提供了一种使用类型变量引用当前类型的解决方法,但仔细考虑其含义和使用非常重要它有节制地。这是一种复杂的模式,需要仔细实施,并且应该保留用于其好处超过增加的复杂性的情况。

以上是奇怪的循环模板模式 (CRTP) 如何解决 Java 的类型变量限制?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板