Cannot find symbol java что это
Перейти к содержимому

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

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

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. )
Скорее всего его тоже нужно экранировать

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

Как исправить ошибку «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 

Отслеживать
9,042 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 

Как исправить error: cannot find symbol?

azerphoenix

Добрый день
Там же черным по белому написано, что он не может найти символ num
System.out.println(«Amoeba №: » + num + «:»);
Переменная у вас объявлена внутри публичного класса и недоступна в самом методе.
int num = Amount;
Прочитайте про область видимости переменной

Ответ написан более двух лет назад
Нравится 2 6 комментариев
lerny @lerny Автор вопроса
Почитал про зоны видимости. Исправил код и все работает:

public class Evolution < public static void main(String[] args) < Amoeba a1 = new Amoeba(5); a1.setChromosomes(5); a1.infoAmoeba(a1.num); >> class Amoeba < static int Amount; static boolean established = false; final public int num; public Amoeba(int n) < if (established) < Amount += 1; >else < Amount = n; >established = true; num = Amount; > private int Chromosomes; public void setChromosomes(int x) < Chromosomes = x; >public void infoAmoeba(int num) < System.out.println("Amoeba №: " + num + ":"); if (Chromosomes == 0) < System.out.println("Chromosomes: unknown " + "; " + "Amount: " + Amount + ";"); >else < System.out.println("Chromosomes: " + Chromosomes + "; " + "Amount: " + Amount + ";"); >> >

Но не уверен, что это хороший способ, если вас не затруднит, посоветуйте как правильно.

Jacen11

lerny, способ чего? соединять строки? нормально
lerny @lerny Автор вопроса
Jacen11, то как я исправил ошибку с num

sergueik

azerphoenix

Орхан Гасанлы @azerphoenix Куратор тега Java
lerny, не очень понимаю надобность одного из этих переменных:

final public int num; static int Amount;

с учетом того, что вы все равно присваиваете
num = Amount;

Если это реализовано логично в вашем коде, то все ок

Ошибка компиляции «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 ;

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

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

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

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