Страницы

Поиск по вопросам

пятница, 31 января 2020 г.

Как обойти constant expression required?

#java


Есть некий статистический метод который должен выполнять определенную деятельность.
Упростив до максимума выглядит он подобным образом 

public class test
{
    public static void main(String[] args) {

        int forTest = 1;
        test(forTest);

    }

    public static void test(int testValue) {
        int m;
        int n = 1;

        switch (testValue) {
            case n: {
                //todo
            }
        }
    }
}


На строке выбора case n: { возникает ошибка constant expression required.
Из-за чего возникает данная проблема? 
Каким образом проектировать методы и классы для исключения возможности данной ошибки
в будущем?
    


Ответы

Ответ 1



У вас проблема не с проектированием, а с синтаксисом языка. После case может идти только константа, но не переменная: switch (testValue) { case 1: { // todo } } Если к такому виду привести код нельзя - не заморачивайтесь и воспользуйтесь оператором if: if (testValue == 1) { // todo }

Ответ 2



Используй "final" при декларировании: public static void test(int testValue) { int m; final int n = 1; switch (testValue) { case n: { //todo } } } @Pavel Mayorov: и почему он должен использовать "if", если "switch" быстрее?

Ответ 3



Используй Kotlin язык. Мне помогло for (File curFile : listOfFiles) { if (curFile.isDirectory()) { switch (curFile.getName()) { case String.valueOf(xls_xlsx): //сдесь проблема - xls_xlsx это тип Enum (константа) break; } } } Теперь я в IDEA создал файл Kotlin'a. Скопировал туда код Java (весь файл или только функцию). Соглашаюсь что трансформируй мне в Kotlin (ждем некоторое время) И готово - код Kotlin'a теперь мой такой (и без проблем константа моя есть в switch (т.е. в when) for (curFile in listOfFiles!!) { if (curFile.isDirectory) { when (curFile.name) { xls_xlsx.toString() -> { //проблема решена. Компилируется. } } } } Если не знали Kotlin, то возможно у вас появился вопрос "как вызывать теперь Котлин из Джавы? Это все сделали за вас. Берем гуглим и есть простые ответы. Почему я пишу этот пост. Потому что я пишу под себя и для себя. Мне нужно удобство и простота кода. Я решил через Kotlin

Комментариев нет:

Отправить комментарий