obj не распознается после объявления в операторе switch
switch (var){
case "YES" : {
Object1 obj = new Object1();
break;
}
default: {
Object2 obj = new Object2();
}
}
NewObject newObject = obj.objToNewObject(param);
Моя проблема в том, что "obj" не распознается -> "Ошибка Java: не удается найти символ"
Я думал, что с "по умолчанию" я буду работать, но нет. Любая помощь ?




Объект 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, что не так с ответом? Он полностью отвечает на ваш вопрос и приводится пример
@amalicode Ваше редактирование ничего не меняет. Вам все еще нужно объявить за пределами коммутатора.
@amalicode это правильный ответ. То, что вы пытаетесь сделать, не будет работать без общего интерфейса Object1 и Object2 . Если они имеют общий интерфейс, то obj следует объявить вне оператора switch как экземпляр интерфейса.
я читаю это. как выбрать между Object1 и Object2, когда я делаю Object obj = null;
@amalicode Я отредактировал ответ, надеюсь, это поможет вам
«Метод не переопределяет метод из своего суперкласса», когда я переопределяю метод @HenriqueSabino
это было из-за "статики". Но почему ?
@amalicode убедитесь, что имена методов такие же, как в базовом классе, также используйте аннотацию @Override, чтобы компилятор знал, что это должен быть переопределенный метод, синтаксис должен быть таким, как я внес в правки
@amalicode Статические методы — это методы класса, а нестатические — методы экземпляра, взгляните на эту ссылку здесь stackoverflow.com/questions/3903537/…
@amalicode Также прочитайте эту тему здесь, это тоже должно вам помочь stackoverflow.com/questions/2223386/…
Объявите
Object objвне оператора switch, но назначьте его внутри.