有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

返回多个java类

因此,我试图为一个游戏编写一个API,我创建了4个不同的类,分别命名为ShipScanStage0、ShipScanStage1、ShipScanStage2、ShipScanStage3,我想在这个类中返回它们

我试图将getScanStageInfo的返回类型设置为Object,但这不是我所寻找的解决方案,我希望API用户能够以一种简洁的方式访问scanStage并使用它的信息

ShipTargetedEvent.java

    package org.xenodev.edj.events;

    import org.xenodev.edj.Event;
    import org.xenodev.edj.events.storage.ShipScanStage0;

    public class ShipTargetedEvent extends Event {

    int scanStage;

    public ShipTargetedEvent(String timestamp, int scanStage) {
        super(timestamp);
        this.scanStage = scanStage;
    }

    public void getScanStageInfo() {
        if(scanStage == 0) {
            return new ShipScanStage0();
        }else if(scanStage == 1) {
            return new ShipScanStage1();
        }else if(scanStage == 2) {
            return new ShipScanStage2();
        }else if(scanStage == 3) {
            return new ShipScanStage3();
        }
     }

    }

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


共 (2) 个答案

  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();
            }
         }
    
    
  2. # 2 楼答案

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

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

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

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

    public ShipScanStage getScanStageInfo() {
    
    }