Корпуса коммутаторов для интерфейсов - PullRequest
0 голосов
/ 06 февраля 2020

Есть ли способ решить, является ли конкретный интерфейс instanceof другим интерфейсом с оператором switch?

 MainInterface inter = //load interface

 switch (inter) {
        case instanceof Interface1:
            Interface1 inter1 = (Interface1) inter;
            //execute methods of inter1
        case instanceof Interface2:
            Interface2 inter2 = (Interface2) inter;
            //execute methods of inter2
    }

Спасибо за вашу помощь.

Ответы [ 2 ]

2 голосов
/ 06 февраля 2020

К сожалению, это невозможно, как указано в документации oracle: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html

Переключатель работает с байтом , short , char и int примитивные типы данных. Он также работает с перечислимыми типами [...], классом String и несколькими специальными классами, заключающими в себе определенные примитивные типы: Character, Byte, Short и Integer [...].

Некоторым способом решения этой проблемы может быть использование операторов if-else или реализация полиморфизма подтипов, как предложил Ивар.

1 голос
/ 06 февраля 2020

Это невозможно сделать с помощью оператора switch case. Вы должны использовать операторы if.

MainInterface inter = null;

if (inter instanceof Interface1) {
    Interface1 inter1 = (Interface1) inter;
    // execute methods of inter1
} else if (inter instanceof Interface2) {
    Interface2 inter2 = (Interface2) inter;
    // execute methods of inter2
}
...