Java: Access Object класса, созданного внутри switch - PullRequest
0 голосов
/ 19 марта 2019

У меня есть сценарий, как показано ниже:

String artifactName="testplan"; //or at times "testsuite" can come
switch (artifactName) {
            case testplan: {
                TestPlan artifact = new TestPlan();
            }
            case testsuite: {
                TestSuite artifact = new TestSuite();   
            }

Исходя из вышесказанного, я хочу получить объект артефакта за пределами коммутатора. В обоих классах (TestSuite и TestPlan) у меня есть атрибут, который я буду устанавливать, когда получаю артефакт и соответственно использую объект. Чтобы быть точным, я буду использовать это, чтобы преобразовать этот объект в XML (XML варьируется в зависимости от класса). Как вытащить артофакт из выключателя? Как получить объект, когда класс меняется внутри переключателя. Пожалуйста, помогите мне как можно раньше.

Ответы [ 2 ]

2 голосов
/ 19 марта 2019

Создать ссылку 'артефакт' типа TestPlan ( TestSuite расширяет TestPlan ) за пределы блока переключателя, а затем внутри операторов case назначить объект (TestPlan /TestSuite) в соответствии с вашим необходимым условием.Ниже код работает нормально.

Если вы хотите использовать общий метод, который доступен в обоих классах, и использовать концепцию наследования и полиморфизма.Вы можете расширить TestPlan (Parent) в TestSuite (child), а вместо ссылки на объект можно использовать ссылку TestPlan.

 String artifactName="testplan"; 
        TestPlan artifact;// Test Plan is the Parent class and extend it to TestSuite
        switch (artifactName) {
                    case "testvplan": {
                        artifact = new TestPlan();
                        break;
                    }
                    case "testsuite": {
                        artifact = new TestSuite();   
                        break;
                    }
                    default : {
                        //some code for default condition
                    }

}
2 голосов
/ 19 марта 2019

Может быть, вы можете сделать следующее:

    String artifactName="testplan"; 
    Object artifact;//create reference 


    switch (artifactName) {
                case testplan: {
                    artifact = new TestPlan();//assing it here
                    break;
                }
                case testsuite: {
                    artifact = new TestSuite();//or here 
                    break;
                }

Так что вам нужно работать непосредственно с экземпляром одного из ваших классов. Ты знаешь. Я новичок в Java на всех. И если кто-то предоставит лучшую идею для этого, это будет хорошо. Но пока я вижу одно решение.

  if(object instanceof TestPlan){
        ((TestPlan) object).doMethod();
    }else if (object instanceof TestSuite){
        ((TestSuite)object).doMethod();
    }

Но имейте в виду, что если не было выполнено ни одного случая переключения, оно все равно будет нулевым.

...