Lucene.Net 2.3.1版变化之TokenStream(搞笑了)

自己做分词,一般选择继承Tokenizer类。在以前的版本中只需要重写Next()方法就可以了。这个类比较简单,而塔的父类TokenStream则更加简单了,和接口没什么两样:

 

//2.1版
public abstract class TokenStream
    {
        
/// <summary>Returns the next token in the stream, or null at EOS. </summary>
        public abstract Token Next();
        
        
/// <summary>Releases resources associated with this stream. </summary>
        public virtual void  Close()
        {
        }
    }

 

 

到了2.3.1版本中,这个抽象类发生了很多变化.下面是2.3.1版的TokenStream类代码。

 

Code

 

 

可以看到,2.3.1版本中多了一个Reset方法和一个Next方法的重载。

在它的子类中重写了Reset和Close方法,但是Next方法没有变化。

 

Code

 

如果,你建立一个类,继承自Tokenizer类,然后,这个时候你做其他事情去了,然后等你回来,你写了调用的代码,嘿嘿,问题来了。会报一个堆栈溢出错误。而你根本不知道这个错误是怎么产生的。这个父类写得太不厚道了,虽然Next方法是必然被重写掉的。

 

 

posted @ 2008-07-23 14:59  Birdshover  阅读(1886)  评论(0编辑  收藏  举报