2015-09-01 3 views
3

Я получаю следующее сообщение об ошибке, когда я пытаюсь построить мой проект Java 1.8:«Путь не является функциональной интерфейсом» ошибка компиляции в классе Java

COMPILATION ERROR : 
------------------------------------------------------------- 
error: incompatible types: Path is not a functional interface 
1 error 

Там нет номера строки, связанного с ошибкой, но Netbeans показывает красную строку squiggly под объявлением пакета для одного из классов в проекте. Этот класс даже не использует Path. Он расширяет абстрактный класс в том же пакете, который использует Path, если это имеет значение.

Кто-нибудь видел это раньше? Любые мысли о том, как это исправить?

+3

Поскольку вы не разместили ни одного кода, я не могу сказать точно, но это выглядит релевантно [http://stackoverflow.com/questions/23682243/lambda-can-only-be-used-with -функционала-интерфейс] (http://stackoverflow.com/questions/23682243/lambda-can-only-be-used-with-functional-interface). Ошибка Google в том, что я сделал это, и несколько других вещей, которые выглядели полезными. – Becuzz

+0

Я не уверен, какой код будет полезен для обмена, но я открыт для предложения. Я понимаю, что функциональные интерфейсы могут иметь только один метод, но я не уверен, почему это даже подходит для моего кода. В проекте нет пользовательских интерфейсов, функциональных или нет. Кроме того, ошибка, похоже, говорит о том, что проблема связана с Path, а не с одним из моих классов. В другом месте проекта я импортирую java.nio.file.Path, который является нефункциональным интерфейсом. Почему компилятор вдруг подумает, что это должно быть иначе? – Jess

+1

Попробуйте скомпилировать исходные файлы с помощью командной строки 'javac', чтобы узнать, есть ли что-то в конфигурации Netbeans. – Holger

ответ

3

Функциональный интерфейс имеет «единственный абстрактный метод» (SAM). Возможно, вы пытаетесь использовать Path таким образом, чтобы он был SAM (например, как лямбда), но Path не является SAM.

+0

Это похоже на хорошую мысль. На самом деле, я не вижу ничего подобного. Если я прокомментирую все в файле, которое Netbeans считает ошибкой, то я могу построить проект без проблем. Итак, каким-то образом этот класс, который даже не использует Path, приводит к этой ошибке компиляции. – Jess

+0

Я * думаю * это то, что вызывало проблему. Как только я определил, что Netbeans был прав, какой класс имел ошибку, я более внимательно посмотрел на этот код. В конструкторе было что-то странное. Один из аргументов конструктора не был правильно подключен к его упоминанию внутри лямбда-выражения. Я заметил, что в этом лямбда-выражении отсутствовал аргумент в отношении чего-то другого. Когда я исправил это, аргумент конструктора, связанный с упоминанием аргумента в выражении лямбда, и ошибка исчезли. – Jess

+0

Тем не менее, чтобы закрыть цикл, рассматриваемое лямбда-выражение не использует Path нигде, поэтому я до сих пор не понимаю, почему ошибка проявляется именно таким образом. Weird. – Jess