所以我正在尝试为游戏编写API,我创建了4个不同的类,分别命名为ShipScanStage0,ShipScanStage1,ShipScanStage2,ShipScanStage3,该类要在该类中返回。
我试图将getScanStageInfo的返回类型设置为Object,但这并不是我正在寻找的一种解决方案,我希望API用户可以采用一种干净简单的方法来访问scanStage并使用其信息。
func updateDetailView() {
object = dataSource[selectedIndex]
}
我想实现用户只能访问StageScan级别的信息,因为如果scanStage级别为2且他们访问scanStage级别3类,则它们将具有一些未初始化的变量,导致游戏没有提供该信息。
答案 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();
}
}