【问题标题】:Why must Lucene Token Filter classes be declared "final"?为什么必须将 Lucene Token Filter 类声明为“final”?
【发布时间】:2014-05-29 17:05:05
【问题描述】:

根据Solr's blog,Lucene 要求 TokenFilter 子类必须声明为 final。在这种情况下,final 类的优势是什么?它使现有 TokenFilter 的功能无法扩展。

【问题讨论】:

    标签: java lucene tokenize


    【解决方案1】:

    TokenFilter 扩展 TokenStream,它的 Javadoc 说:

    Lucene 中的TokenStream-API 基于装饰器模式。 因此所有非抽象子类必须是最终的或至少有一个 incrementToken()的最终实现!这在 Java 时被检查 断言已启用。

    例如,StandardFilter 未标记为 final(只有 incrementToken() 是)。

    因此,如果您想扩展现有的 TokenFilter,最好通过委托来实现。

    【讨论】:

    • 嗯,这很有趣。我知道装饰器模式试图防止过多的子类化,但我不知道它明确禁止它。子类化有什么会破坏装饰器模式的吗?
    • 我个人认为这只是防御性编码,以确保敏感的代码不会丢失在子类中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 2011-10-02
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多