Ошибка компиляции Java для типа перечисления «Общий тип EngineType должен быть определен в собственном файле Car.java»

Я новичок в java, и уже второй раз пишу на ней код. У меня есть ошибка о том, что общедоступный тип EngineType должен быть определен в собственном файле. EngineType — это тип перечисления, и я упомянул его вне класса Car, с моей точки зрения ориентированного программирования, как бывшего студента C++, все должно быть в порядке. Не могли бы вы посмотреть на мой код и помочь мне? Большое спасибо за ваше желание помочь мне.

       package ro.ase.classes1;

    import ro.ase.interfaces1.mobility;

    public final class Car extends vehicle implements mobility,Cloneable
    {
        public final int maxNbofkm=1_000_000;  
        public Enginetype Enginetype;
        private float speed;

        public Car()
        {
            super();//it s mandatory to be on first line of the constructor
            Enginetype=Enginetype.gas;
            speed=0;
        }

        public Car(String _name,Enginetype _enginetype,float _speed)
        {
            super(_name,true);//call the base constructor
            Enginetype=_enginetype;
            speed=_speed;
        }

        @Override
        public void DisplaySpeed() {
            System.out.println(String.format("The %s car runs with %f km/h", Enginetype.toString(),speed ));
        }

        @Override
        public void Start() {

        }

        @Override
        public void Stop() {

            System.out.println("The"+Enginetype.toString()+"car has stopped");
        }

    }
enum Enginetype{gas, diesel,hybrid,electric}

КОД С ОШИБКОЙ

Пожалуйста, не связывайте изображение кода. Разместите код здесь. Однако вы получаете ошибку компиляции, поскольку в одном файле в java может быть только один общедоступный класс. Но в вашем случае вы сделали Car и EngineType общедоступными.

Amit Bera 09.03.2019 12:40

Либо сделайте EngineType не-public, переместите его в собственный файл с правильным именем, либо сделайте его членом класса Car.

Slaw 09.03.2019 12:50

В Java вам не разрешено объявлять более одного класса верхнего уровня в файле (класс верхнего уровня должен иметь то же имя, что и файл java, в котором он объявлен). Если вы хотите объявить больше классов в одном файле, вы должны использовать вложенные классы. docs.oracle.com/javase/tutorial/java/javaOO/nested.html

Octavian R. 09.03.2019 12:54

Амит Бера, это не работает, я пытался сделать как класс, так и перечисление общедоступными, и ошибка все еще существует.

Corina 09.03.2019 12:58

@Corina У вас должно быть только один из них общедоступными.

LppEdd 09.03.2019 13:00

Не размещайте текст/код как изображение/ссылку (больше информации). Используйте опцию редактировать, чтобы исправить сообщение.

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

Ответы 1

Ответ принят как подходящий

Проблема в том, что ваш класс Enum определен как общедоступный за пределами вашего класса Car — наличие двух общедоступных классов в одном файле не допускается в Java.. Поэтому вы можете исправить это одним из трех способов:

  1. Сделайте Enum приватным.
  2. Поместите общедоступный Enum в отдельный файл.
  3. Поместите Enum в класс Car.

Например:

Дело 1:

public class VowelPrint  {

    public static void main(String[] args) {
        System.out.println(Vowels.A);
    }
}

enum Vowels {
    A, B, C;
}

Случай 3:

public class VowelPrint  {

    public enum Vowels { //Can also be private
        A, B, C;
    }  
    public static void main(String[] args) {
        System.out.println(Vowels.A);
    }
}

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