Java:在交换机内部创建的类的访问对象

时间:2019-03-19 19:11:49

标签: java class object switch-statement case

我的情况如下:

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 个答案:

答案 0 :(得分:1)

也许您也可以进行以下操作:

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

但是请注意,如果不满足任何切换条件,它将仍然为空。

答案 1 :(得分:1)

在开关块外部创建类型为 TestPlan TestSuite 扩展 TestPlan )的引用“工件”,然后在case语句内部分配对象(TestPlan / TestSuite)根据您的条件。下面的代码可以正常工作。

如果要使用在两个类中都可用的通用方法,并使用继承和多态性的概念。您可以在TestSuite(child)中扩展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
                    }

}