Объявить объект в операторе switch

obj не распознается после объявления в операторе switch

switch (var){
        case "YES" : {
              Object1 obj = new Object1();
              break;
       }
        default: {
              Object2 obj = new Object2();
       }

     }

NewObject newObject = obj.objToNewObject(param);

Моя проблема в том, что "obj" не распознается -> "Ошибка Java: не удается найти символ"

Я думал, что с "по умолчанию" я буду работать, но нет. Любая помощь ?

Объявите Object obj вне оператора switch, но назначьте его внутри.

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

Ответы 1

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

Объект obj в вашем коде является локальной переменной switch statement, поэтому к нему нельзя получить доступ за пределами этой области. Кроме того, чтобы иметь возможность использовать obj как два разных класса, вам придется использовать Polymorphism, поэтому вам придется объявить базовый класс (я буду использовать A для иллюстрации) и два разных класса (B и C), которые расширяют класс A.

class A {
    public NewObject(param) {
        return new NewObject();
    }
}

class B extends A{
    @Override
    public NewObject(param) {
        return new NewObject();
    }
}

class C extends A { 
    @Override
    public NewObject(param) {
        return new NewObject();
    }
}

A obj = null;
switch (var){
        case "YES" : {
              obj = new B();
              break;
       }
        case "NO": {
              obj = new C();
       }
        default: {
              obj = new B();
       }

     }
NewObject newObject = obj.objToNewObject(param);

Обратите внимание, что классы B и C должны будут override использовать метод objToNewObject из класса A, чтобы это работало.

Mh.. его другой объект

amalicode 29.05.2019 17:45

@amalicode, что не так с ответом? Он полностью отвечает на ваш вопрос и приводится пример

Void Spirit 29.05.2019 17:46

@amalicode Ваше редактирование ничего не меняет. Вам все еще нужно объявить за пределами коммутатора.

zero298 29.05.2019 17:50

@amalicode это правильный ответ. То, что вы пытаетесь сделать, не будет работать без общего интерфейса Object1 и Object2 . Если они имеют общий интерфейс, то obj следует объявить вне оператора switch как экземпляр интерфейса.

Chris Thompson 29.05.2019 17:51

я читаю это. как выбрать между Object1 и Object2, когда я делаю Object obj = null;

amalicode 29.05.2019 17:51

@amalicode Я отредактировал ответ, надеюсь, это поможет вам

Henrique Sabino 29.05.2019 17:53

«Метод не переопределяет метод из своего суперкласса», когда я переопределяю метод @HenriqueSabino

amalicode 29.05.2019 18:19

это было из-за "статики". Но почему ?

amalicode 29.05.2019 18:23

@amalicode убедитесь, что имена методов такие же, как в базовом классе, также используйте аннотацию @Override, чтобы компилятор знал, что это должен быть переопределенный метод, синтаксис должен быть таким, как я внес в правки

Henrique Sabino 29.05.2019 18:23

@amalicode Статические методы — это методы класса, а нестатические — методы экземпляра, взгляните на эту ссылку здесь stackoverflow.com/questions/3903537/…

Henrique Sabino 29.05.2019 18:24

@amalicode Также прочитайте эту тему здесь, это тоже должно вам помочь stackoverflow.com/questions/2223386/…

Henrique Sabino 29.05.2019 18:25

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