返回多个类的java

时间:2019-04-07 03:15:17

标签: java

所以我正在尝试为游戏编写API,我创建了4个不同的类,分别命名为ShipScanStage0,ShipScanStage1,ShipScanStage2,ShipScanStage3,该类要在该类中返回。

我试图将getScanStageInfo的返回类型设置为Object,但这并不是我正在寻找的一种解决方案,我希望API用户可以采用一种干净简单的方法来访问scanStage并使用其信息。

func updateDetailView() {
    object = dataSource[selectedIndex]
}

我想实现用户只能访问StageScan级别的信息,因为如果scanStage级别为2且他们访问scanStage级别3类,则它们将具有一些未初始化的变量,导致游戏没有提供该信息。

2 个答案:

答案 0 :(得分:2)

如果您说每个ShipScanStage类型的对象都是相似的,那么它将具有足够相似的功能。

如果是这种情况,那么这些对象中的每个对象都应该从抽象类扩展或实现一个接口。

...然后,您实际上必须从方法中返回该抽象类型或接口。

假设抽象类或接口被命名为ShipScanStage,则方法的签名为:

public ShipScanStage getScanStageInfo() {

}

答案 1 :(得分:1)

有多种方法可以实现此目的,一种常见的方法是使用composite pattern来抽象实现并返回根接口。在实现中,它看起来像:

定义公共接口

public interface ScanStageInfo() {

}

在舞台上有不同的实现方式

public class ScanStageOneInfo implements ScanStageInfo {

}

public class ScanStageTwoInfo implements ScanStageInfo {

}

public class ScanStageThreeInfo implements ScanStageInfo {

}

public class ScanStageFourInfo implements ScanStageInfo {

}

基于业务逻辑的回报

    public ScanStageInfo getScanStageInfo() {
        if (scanStage == 0) {
            return new ScanStageOneInfo();
        } else if(scanStage == 1) {
            return new ScanStageTwoInfo();
        } else if(scanStage == 2) {
            return new ScanStageThreeInfo();
        } else if(scanStage == 3) {
            return new ScanStageFourInfo();
        }
     }