Ошибка: не удается найти символ при объявлении нового объекта LunchBag?

ошибка: не удается найти символ при объявлении нового объекта LunchBag в моем классе TestLunchBag в основном методе. Также есть отдельный класс Lunch (только с полем int и конструкторами / геттерами / сеттерами).

 LunchBag<Lunch> lunchBox = new LunchBag<>(); 

Приведенное выше объявление дает мне ошибку «ошибка: не удается найти символ», относящуюся к LunchBag, несмотря на то, что LunchBag определен как класс, реализующий интерфейс GeneralBag. Вот конкретная ошибка:

error: cannot find symbol
LunchBag<Lunch> lunchBox = new LunchBag<>();
  symbol:   class LunchBag
  location: class TestLunchBag

Вышеупомянутый блок повторяется дважды для одной и той же строки, говоря о двух ошибках.

Я определил класс Lunch, в котором просто есть поле int для кода, представляющего обед (1 для яблока, 2 для бутерброда и т. д.). В моем определении класса LunchBag

   package arraybags;
   import java.util.Arrays;

   public class LunchBag<T> implements GeneralBagInterface<T> {

        private T[] bag;
        private static final int DEFAULT_CAPACITY = 10;
        private int numberOfEntries;

        /**
         * Creates an empty bag whose initial capacity is 10.
         */
        public LunchBag() {
            this(DEFAULT_CAPACITY);
        }

        /**
         * Creates an empty bag having a given initial capacity.
         *
         * @param capacity the integer capacity desired
         */
        public LunchBag(int capacity) {
            numberOfEntries = 0;
            bag = (T[]) new Object[capacity];
        }}

Основной метод моего класса TestLunchBag и строка, в которой появляется ошибка, выглядят так, как написано выше:

LunchBag<Lunch> lunchBox = new LunchBag<>();

Код класса TestLunchBag:

package arraybags;

import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

    public class TestLunchBag{

    public static void main(String[] args) 
    {
            LunchBag<Lunch> lunchBox = new LunchBag<>();

            Scanner in = new Scanner(System.in);
            choice = in.nextInt();

            System.out.println("Enter lunch item (ID):");
            int userLunchItemEntry = in.nextInt();
            Lunch lunch = new Lunch(userLunchItemEntry);

            if (lunch.isValidValue == true)
               {
                  lunchBox.add(lunch);
               }
}}

Что касается файлового каталога: у меня есть пакет под названием arraybags, в котором есть:

GeneralBagInterface.java
Lunch.java
LunchBag.java
TestLunchBag.java

мой интерфейс import и def выражение:

package arraybags;

public interface GeneralBagInterface <T>{

//general bag operation methods that I override in my LunchBag class
}

Если нужно, определение класса Lunch и пакеты:

package arraybags;
public class Lunch {
private int lunchItem;
public boolean isValid = false;

//and relevant methods
}

Я объявляю что-то не так, или мой конструктор по умолчанию может быть недействительным / правильно написанным? Если да, как мне правильно объявить новый объект LunchBag, который принимает объекты Lunch в свое поле массива пакетов?

Не могли бы вы опубликовать минимальную и полную реализацию класса testLunchBag, чтобы увидеть проблему?

Sergey Vyacheslavovich Brunov 15.09.2018 20:05

Как вы компилируете свои классы? Почему бы вам не поместить свои классы в пакет, как они должны, и не соблюдать соглашения об именах Java?

JB Nizet 15.09.2018 20:17

Классы находятся в пакете, я просто вставил определения классов. Что вы конкретно имеете в виду, говоря об именах?

mobcity zkore 15.09.2018 20:23

@SergeyBrunov готово

mobcity zkore 15.09.2018 20:23

Классы начинаются с заглавной буквы. Вы не ответили на мой вопрос: как вы компилируете свои классы. Если они в упаковке, то какие. Вы импортируете LunchBag внутри testLunchBag. Отправьте все соответствующий код (инструкции пакета и импорта в обоих классах) и ответьте на мой вопрос.

JB Nizet 15.09.2018 20:27

@JBNizet сделал и полностью пропустил столицу. Спасибо за улов. Не уверен, что вы имеете в виду под "компиляцией", я просто нажимаю "запустить" в своей среде IDE netbeans. Я знаю, что выгляжу совершенно невежественным, но это все, что я знаю о компиляции моего проекта.

mobcity zkore 15.09.2018 20:53
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
6
91
2

Ответы 2

Скомпилирован ли LunchBag и был ли он импортирован в ваш класс testLunchBag (если они не находятся в одном пакете).

о, они находятся в одном пакете, я опубликовал больше информации в редактировании

mobcity zkore 15.09.2018 20:54

В определении вашего класса LunchBag отсутствует закрывающий символ "}".

Другие вопросы по теме