gpt4 book ai didi

java - 抽象方法/避免转换

转载 作者:行者123 更新时间:2023-11-30 08:29:36 24 4
gpt4 key购买 nike

我有这段代码:

public interface Position {
public int getX();
public int setX(int x);
public int getY();
public int setY(int y);
}

public StandardPosition implements Position {
// STANDARD implementation of Position here
}

public abstract class Mover {
public abstract Position move ( Position originalPosition );
}

“移动器”是将某物从初始位置移动到最终位置的东西。

现在这是有趣的部分......一些移动器更复杂并且使用稍微复杂一点的 Position 对象。

public class ComplicatedPosition extends StandardPosition {
// ADDS Y DIMENSION
private int y;
public int getY() { return(y); }
public void setY(int y) { this.y = y ; }
}


public class MoreComplicatedMover extends Mover {

@Override
public void Position move(Position initialPosition) {
ComplicatedPosition q = (ComplicatedPosition) initialPosition;
// Do a transformation and
// return a new position
return(q);
}

}

我的问题是……有什么方法可以避免从 Position 转换为 ComplicatedPosition……(我们正在从接口(interface)转换为类……看起来有点尴尬)……提出这个问题的另一种方式是:是否有任何其他方式来设置此代码?干杯!

最佳答案

好吧,你可以做的一件事就是使用泛型,比如:

public abstract class Mover<T extends Position> {
public abstract T move(T originalPosition );
}

public class ComplicatedMover extends Mover<ComplicatedPosition> {
public ComplicatedPosition move(ComplicatedPosition p) {
//do stuff
}
}

但是我不确定这是否是您应该想要的。

顺便说一句;您的 Mover 应该给出一个新的 Position 还是改变给定的 Position?如果您要更改给定的 Position,我个人会将其设为 void 方法。

关于java - 抽象方法/避免转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19261801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com