Java, не могу найти символ: метод methodName (org.bla.blabla.myClass) - PullRequest
0 голосов
/ 23 февраля 2011

Я использую API Lucene, и в этой строке моего кода появляется следующая ошибка:

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: не удается найти символ символ: метод add (org.apache.lucene.document.Field) расположение: класс CollectionIndexer. Документ _document.add (новое поле («тип», 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 ]

3 голосов
/ 23 февраля 2011

Когда я нахожусь в тупике из-за этого типа ошибки, это обычно происходит из-за того, что у меня есть два определения InterfaceName, и я случайно импортировал неверное в одном или нескольких местах.

(случается, например, когда я случайно выбираю java.awt.List вместо java.util.List при автоматическом импорте отсутствующих классов.)

Убедитесь, что ...

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

... соответствует ожидаемому пакету / классу.

1 голос
/ 23 февраля 2011

Проблема связана с тем, что ваш метод document.getType() возвращает строку и там не является конструктором в классе Field, который соответствует вашему вызову. Смотри http://lucene.apache.org/java/3_0_3/api/all/org/apache/lucene/document/Field.html.

Если я проверю ваш код в моей среде, Eclipse скажет:

Поле конструктора (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();

б. Переименуйте свой внутренний класс, чтобы у вас не было конфликта имен.

0 голосов
/ 23 февраля 2011

Обновлено на основе обновлений вопроса:

  • Убедитесь, что ваши фигурные скобки расположены вокруг этой линии и что больше нет проблем, вызывающих проблему.
  • Сократите код до минимально возможного количества строк, чтобы исключить любые другие элементы, которые могут быть отключены компилятором.
  • Компиляция без commons-digester-2.1, если возможно, чтобы устранить возможные конфликты.
  • Разбейте строку так, чтобы объект Field создавался на отдельной строке, чем добавление поля в документ, чтобы вы могли убедиться, что нет проблем с вызовом конструктора.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...