Перейти к содержимому

Cannot find symbol java что это

  • автор:

Как исправить ошибку компиляции java: cannot find symbol symbol:?

В общем и целом:
пишу учебный банковский сервис, который рассчитывает проценты по кредиту. Более чем уверен, что ошибка в самом построении моего кода, а как исправить его я не понимаю. помогите кто чем может.

@Override public CreditDTO statement(CreditDTO creditDTO)< CreditEntity creditDtoFromEntity = CreditMap.INSTANCE.toEntity(creditDTO); CreditEntity creditEntity = new CreditEntity();//кредит creditEntity.setLimit(creditDtoFromEntity.getLimit());//Сумма необходимая клиенту creditEntity.setPercent(creditDtoFromEntity.getPercent());//проценты creditEntity.setMonths(creditDtoFromEntity.getMonths()); // кол-во месяцев creditEntity.getBankEntity().setId(BankMap.INSTANCE.toEntity(creditDTO.getBankDTO()).getId());// id банка creditEntity.getClientEntity().setId(ClientMap.INSTANCE.toEntity( creditDTO.getClientDTO()).getId());// id клиента CreditEntity save = creditRepo.save(creditEntity); return CreditMap.INSTANCE.toDto(save); >
@Override public OfferDTO registration(OfferDTO offerDTO) < OfferEntity offer = new OfferEntity();// новое КП CreditEntity creditEntity = CreditMap.INSTANCE.toEntity(statement(offerDTO.getCreditDTO())); offer.setCreditId(creditEntity.getId()); offer.setClientId(creditEntity.getClientEntity().getId()); int oneРundredPercent = 100; offer.setClientId(offer.getClientId());//id клиента вписываем вручную, раз уж спринг секьюрити нет. offer.setPaymentDate(new Date());//дата платежа offer.setSum(creditEntity.getLimit()+creditEntity.getLimit()/oneРundredPercent*creditEntity.getPercent());//сумма+проценты offer.setSumPay(offer.getSum()/creditEntity.getMonths()); //месячный платёж offer.setSumPayDeposit(creditEntity.getLimit()/creditEntity.getMonths()); //гашение задолжности без процентов offer.setSumPayPercent(offer.getSumPay()-offer.getSumPayDeposit());//гашение процентов OfferEntity save = offerRepo.save(offer); return OfferMap.INSTANCE.toDto(save); >
C:\Users\Дмитрий\Desktop\bank\src\main\java\com\example\demo\service\impl\CalculateServiceImpl.java:32:50 java: cannot find symbol symbol: method getLimit() location: variable creditDtoFromEntity of type com.example.demo.model.entity.CreditEntity

607afe45ea3b8967471314.png

  • Вопрос задан более двух лет назад
  • 1786 просмотров

4 комментария

Простой 4 комментария

Сергей Горностаев @sergey-gornostaev Куратор тега Java
Полный текст ошибки добавьте в вопрос.
Сергей Горностаев @sergey-gornostaev Куратор тега Java
Теперь покажите код CreditEntity.
Дмитрий Волокитин @Dima_gogi_ya Автор вопроса

package com.example.demo.model.entity; import lombok.Data; import javax.persistence.*; import java.util.List; @Entity @Table(name = "credit") @Data public class CreditEntity

Сергей Горностаев @sergey-gornostaev Куратор тега Java

Дмитрий Волокитин, похоже, Орхан Гасанлы вам правильно подсказал, что Lombok не генерирует аксессоры.

Решения вопроса 0
Ответы на вопрос 1

azerphoenix

Орхан Гасанлы @azerphoenix Куратор тега Java
Java Software Engineer

Добрый день!
Обратите внимание, что у вас в консоли все геттеры выпадают с ошибкой. Это бывает из-за ошибок при использовании библиотеки lombok.
Например, в IDEA не установлен плагин lombok или например, для данного проекта не включена annotation processing

Ответ написан более двух лет назад
Нравится 1 2 комментария
Дмитрий Волокитин @Dima_gogi_ya Автор вопроса
Другой проект на том-же стеке работает. Но я всё-же проверил настройки. Всё в порядке.

azerphoenix

Орхан Гасанлы @azerphoenix Куратор тега Java

Дмитрий Волокитин,
увидел ваш класс CreditEntity.
Есть еще одна идея почему это может происходить.
Если вкратце, то некоторые названия зарезервированы в SQL. Например, limit
375 слово — https://www.drupal.org/docs/develop/coding-standar.
Предположу, что при создании entity данная колонка в БД не создается. Отсюда и ошибка.
Чтобы исключить ошибку в CreditEntity измените на:

@Column(name = "`limit`") int limit;

Обратите внимание, что в name я указал название limit с символом backtick
https://vladmihalcea.com/escape-sql-reserved-keywo.

Или же можете в properties || yml прописать:
hibernate.globally_quoted_identifiers=true
https://stackoverflow.com/questions/2224503/how-to.

P.S. Слово percent тоже зарезервировано (522 слово — https://www.drupal.org/docs/develop/coding-standar. )
Скорее всего его тоже нужно экранировать

Правда, это список зарезервированных слов отличается в зависимости от используемой БД.

Ошибка компиляции «Can not Find Symbol» в Java

Ошибки «Не удается найти символ» обычно возникают, когда вы пытаетесь ссылаться на необъявленную переменную в коде. Ошибка «Не удается найти символ» означает, что компилятор не может этого сделать. Ваш код, похоже, ссылается на то, что компилятор не понимает.

Когда ваш код компилируется, компилятору необходимо выяснить, что означает каждый идентификатор вашего кода. Когда компилятор просматривает код, он найдет что-то и знает, что с ним делать или нет. Ошибка «Не удается найти символ» относится к идентификаторам и означает, что Java не может понять, что означает «символ».

Пример
public class TestClass < public static void main(String[] args) < int x = 2; int y = 4; sum = x + y ; System.out.println(sum); >>
Выход
TestClass.Java:10: error: cannot find symbol sum = x + y ; symbol: variable sum location: class TestClass TestClass.Java:11: error: cannot find symbol System.out.println(sum); symbol: variable sum location: class TestClass 2 errors

В приведенном выше коде переменная сумма не была объявлена, вам нужно сообщить компилятору, каков тип суммы; например:

int sum = x + y ;

Общими причинами ошибки «Не удается найти символ» являются такие вещи, как:

Общими причинами ошибки «Не удается найти символ» являются такие вещи, как.

Java: Ошибки при работе с переменными

Порядок инструкций в коде с переменными имеет огромное значение. Переменная должна быть определена до того, как будет использована. Ниже пример ошибки, которую очень часто допускают новички:

System.out.println(greeting); var greeting = "Father!"; 

Запуск программы выше завершается с ошибкой:

Error: java: cannot find symbol symbol: variable greeting 

Ошибка cannot find symbol означает, что в коде используется переменная, которая не определена. Причем в самой ошибке об этом говорят прямо: variable greeting .

Кроме неправильного порядка определения, еще встречаются банальные опечатки, причем как при использовании переменной, так и при ее объявлении.

Еще одна распространенная ошибка — попытаться объявить уже объявленную переменную:

var greeting = "Father!"; var greeting = "Father!"; 

Так делать нельзя. Придется создать новую переменную.

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

Задание

Найдите в программе необъявленную переменную и объявите ее, присвоив ей значение «Dragon» ;

Targaryen and Dragon
Упражнение не проходит проверку — что делать? ��

Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:

  • Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.

В моей среде код работает, а здесь нет ��

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя ��

Это нормально ��, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.

В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Прочитал урок — ничего не понятно ��

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.

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

Как исправить ошибку «error cannot find symbol»?

Только начал учиться программированию. При компиляции файла Main.java выходит ошибка error cannot find symbol . Если я правильно понял, то он не взаимодействует с Person.java , а пытается выполнить всё в Main.java . Но как мне это решить? Всё ещё никак не могу понять. Main.java:

 public class Main < public static void main(String[] args) < Person dima = new Person(); System.out.println(dima.height); >> 

Person.java:

 public class Person

Ошибка:

E:\study\java> javac Person.java E:\study\java> javac main.java main.java:3: error: cannot find symbol Person dima = new Person(); ^ symbol: class Person location: class main main.java:3: error: cannot find symbol Person dima = new Person(); ^ symbol: class Person location: class main 2 errors 

Отслеживать
8,984 4 4 золотых знака 19 19 серебряных знаков 28 28 бронзовых знаков
задан 13 янв 2020 в 10:58
23 1 1 золотой знак 1 1 серебряный знак 3 3 бронзовых знака
Пожалуйста запустите в терминале echo %CLASSPATH% и пришлите что вывелось
13 янв 2020 в 12:17
Мне кажется, что в классе main не хватает импорта. Попробуйте добавить в начало import Person
13 янв 2020 в 12:40

Привет, можете почитать здесь pro-java.ru/java-dlya-nachinayushhix/import-paketov-v-java что указание import необязательно если используется полное имя класса, которое в нашем случае и есть Person , так что ошибка не в этом.

13 янв 2020 в 12:46

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Такое поведение скорее всего связано с переменной %CLASSPATH% в которой перечислены папки где javac будет искать .class файлы для компиляции. По умолчанию эта переменная окружения не задана и тогда javac ищет .class файлы только в текущей папке.

Скорее всего у вас эта переменная была задана ранее (можно проверить при помощи echo %CLASSPATH% ) и тогда текущую папку нужно указывать вручную, например через

javac main.java --class-path . 

( . означает текущую директорию)

Если не хочется каждый раз вручную указывать —class-path . можно очистить %CLASSPATH% при помощи set CLASSPATH=

Обратите внимание что необязательно даже вызывать javac Person.java , компилятор автоматически скомпилирует Person.java

Вот пример запуска на моем компьютере (у меня линукс поэтому синтаксис немного отличается)

~/Workspace$ export CLASSPATH= ~/Workspace$ echo $CLASSPATH ~/Workspace$ javac Person.java ~/Workspace$ javac main.java ~/Workspace$ java main 189 ~/Workspace$ export CLASSPATH=/somedirectory ~/Workspace$ echo $CLASSPATH /somedirectory ~/Workspace$ javac Person.java ~/Workspace$ javac main.java main.java:3: error: cannot find symbol Person dima = new Person(); ^ symbol: class Person location: class main main.java:3: error: cannot find symbol Person dima = new Person(); ^ symbol: class Person location: class main 2 errors ~/Workspace$ javac main.java --class-path . ~/Workspace$ java main 189 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *