Java,找不到符号:方法methodName(org.bla.blabla.myClass)

时间:2011-02-23 15:01:11

标签: java lucene

我正在使用Lucene API,我在这行代码中收到以下错误:

import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Fieldable;

...

Document _document  = new Document();
_document.add(new Field("type", document.getType()));

错误: CollectionIndexer.java:34:找不到符号 symbol:方法add(org.apache.lucene.document.Field) location:类CollectionIndexer.Document         _document.add(new Field(“type”,document.getType()));

这是关于该方法的文档: http://lucene.apache.org/java/3_0_3/api/all/org/apache/lucene/document/Document.html#add(org.apache.lucene.document.Fieldable

感谢

更新:javac -cp commons-digester-2.1 / commons-digester-2.1.jar:lucene-core-3.0.3.jar myApp.java

3 个答案:

答案 0 :(得分:3)

当我对这种类型的错误感到难过时,通常是因为我有InterfaceName的两个定义,并且意外地在一个或多个地方导入了错误的定义。

(例如,当我自动导入缺失的类时,我意外选择了java.awt.List而不是java.util.List。)

确保......

symbol  : method methodName(org.bla.blabla.myClass)
                            \____________________/
                               ... this part ...

...匹配预期的包/类。

答案 1 :(得分:1)

问题来自于document.getType()方法返回字符串的事实 在Field类中没有与您的调用匹配的构造函数。 请参阅http://lucene.apache.org/java/3_0_3/api/all/org/apache/lucene/document/Field.html

如果我在我的环境中测试你的代码,Eclipse会说:

  

构造函数Field(String,String)未定义

也许你可以这样做:

Document _document = new Document();
_document.add(new Field("type", document.getType().getBytes(), Store.YES);
// Or document.add(new Field("type", document.getType().getBytes(), Store.NO);

源代码提交后更新--------------------

问题来自于你的班级中有一个名为Document的内部类。 Document类和Lucene之间存在名称冲突。当您使用行Document _document = new Document();实例化文档时,您实际上正在实现您的文档类。这就是编译器无法找到add方法的原因。

多种解决方案:

一个。将文档前缀为Lucene包名称

org.apache.lucene.document.Document _document = new org.apache.lucene.document.Document();

湾重命名您的内部类,以便您没有任何名称冲突。

答案 2 :(得分:0)

根据问题更新进行了更新:

  • 确保围绕此排列的花括号并且没有其他原因导致问题。
  • 将代码缩减到尽可能少的行,以消除可能通过编译器关闭的任何其他项目。
  • 如果可以的话,在没有commons-digester-2.1的情况下进行编译,以消除可能的冲突。
  • 断开排队,以便在单独的行上创建Field对象,而不是将字段添加到文档中,以便确认构造函数调用没有问题。