这可以被视为一般 Java 问题,但为了更好地理解,我使用 Lucene 作为示例。
您可以在 Lucene 中使用不同的 Tokenizer 来标记文本。有主要的抽象 Tokenizer 类,然后是许多不同的扩展它的类。TokenFilter 也是一样。
现在,似乎每次您想要索引文档时,都会创建一个新的 Tokenizer。问题是,既然 Tokeinzer 只是一个实用程序类,为什么不让它成为静态的呢?例如,将所有字母转换为小写的 Tokenizer 可以有一个静态方法,该方法对它获得的每个输入都执行此操作。为我们要索引的每段文本创建一个新对象有什么意义?
值得一提的是——Tokeinzer 有一个私有字段,其中包含它接收到的用于标记化的输入。我只是不明白为什么我们需要以这种方式存储它,因为对象在标记化过程结束后立即被销毁并返回新的标记化文本。我唯一能想到的可能是多线程访问?
谢谢!