Java:Access在switch中创建的类的Object

问题描述 投票:0回答:2

我有如下情况:

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根据类而不同)。如何从交换机中获取artofact?当班级在开关盒内变化时,如何获取对象。请最早帮帮我。

java class object switch-statement case
2个回答
2
投票

也许你也可以做以下事情:

    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();
    }

但要注意,如果没有满足切换案例,它仍然是空的。


2
投票

在switch块之外创建TestPlan类型的引用'artifact'(TestSuite扩展TestPlan),然后在case语句中根据您所需的条件分配对象(TestPlan / TestSuite)。下面的代码工作正常。

如果您想使用两个类中都可用的公共方法,并使用继承和多态的概念。您可以在TestSuite(子)中扩展TestPlan(Parent)而不是对象引用您可以使用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
                    }

}
© www.soinside.com 2019 - 2024. All rights reserved.