java - 在 Main[JAVA] 中用另一种类型的对象替换对象

标签 java object

我尝试将主对象中的对象更改为另一种类型的对象。这是一些代码,可以了解我的实际意思。

Main.java

public class Main {
    public static void main(String[] args) {
        Controller newcontroller = Controller.create();
        newcontroller.change();
    }
}

Controller .java:

public class Controller{

    public static Controller create() {
        return new North(0,0);
    }

    public void change() {
    }

}

北.java:

public class North extends Controller{
    int x;
    int y;

    public North(int x, int y) {
        this.x = x;
        this.y = y;
    }

    @Override
    public void change() {
        super.change();
        //Now i have to replace the newcontroller North(x,y) by South(x,y)
        super.newcontroller = new South(this.x, this.y)
    }
}

South.java 和 North 一样,但又变成了 North。 我怎样才能做到这一点?或者我完全以错误的方式做这件事? 不允许使用 if, switch, for, while, ... 只能使用线性编程

最佳答案

执行此操作的一个简单方法是在 Controller 类中添加一个 boolean 标志并检查该标志是否发生更改,但不应这样做,因为它不遵循 OOP 原则。在上面的代码中,您似乎正在创建一个返回 Controller 的工厂。

public class ControllerFactory {

    public static CreateController(boolean isNorth) {
        return isNorth ? new North() : new South(); 
    }
}

无论您在何处实例化 Controller ,都有一个 boolean 值来保存 Controller 的当前状态。

boolean isNorth = true;

isNorth = !isNorth;
controller = ControllerFactory.CreateController(isNorth);

关于java - 在 Main[JAVA] 中用另一种类型的对象替换对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62108200/

相关文章:

python - 从python中的对象获取带有getattr的属性

java - Java 中的对象池替代方案

javascript - 创建对象时如何处理丢失的 JSON 数据? ( typescript )

java - 在异步任务中更新 UI 线程

java - ProcessBuilder.inheritIO() 将输出发送到错误的位置

java - android 致命异常 : AsyncTask #2

iOS,无法委托(delegate)viewDidLoad之外

java - Proguard : google. gms - 重复的 zip 条目 c.class == zzab.class

java - 当没有定位器时如何使用 xpath 验证文本

javascript - 参数未通过两级 JavaScript 构造函数传递