当前位置: 首页 > 知识库问答 >
问题:

重铸“this”变通方法

阚英武
2023-03-14

我正在尝试创建一个简单的国际象棋程序,我遇到了一个小问题,当执行典当推广。我有一个抽象的类片和6个类(国王,皇后,鲁克,骑士,主教和卒)扩展它。所以当一个棋子到达棋盘的另一端时,我想让他变成皇后。

Public class Pawn extends Piece {
...
  @Override
  public void move(int toCol, int toRow) {
    this.col = toCol; this.row = toRow;
    if (toRow == endRow)
      this = (Queen)this
  }
}

我想知道是否有更好的方法来做这件事。以某种方式从“内部”更改对象的类。

共有1个答案

寇涵容
2023-03-14

您可以让move方法返回移动的部分。类似于

@Override
public Piece move(int toCol, int toRow) {
    if (toRow == endRow) {
      return new Queen(toCol, toRow);
    }
    return new Pawn(toCol, toRow);
  }

这样,您就可以使piece对象不可变。

 类似资料:
  • 我对Java非常陌生,尤其是编写泛型代码。我的任务是编写泛型函数,返回ResultSet对象的ID列的值。 父类有整数ID,子类有字符串ID(我知道有字符串ID很少见,但数据很具体) 所以在父类中,我最终得到了函数: 在子类中,我有一个覆盖父类的方法: 当我需要调用这个函数时,我只需要: 我的问题是,如果做双重铸造(T)((长) 可以吗?有没有更简单的方法来实现这个功能,我不知道?

  • 在抽象工厂模式中,我使用泛型。我有一个扩展Serializable的BaseEntity接口,Employee类实现了BaseEntity。在抽象类中,我有一个getJavaObj方法 是一种方法,它接受并返回

  • 出于某种原因,我在es6课上给“这个”取了个奇怪的值... null null 为什么clickers的click方法中的“this”指的是dom节点而不是...本身? 更重要的是,如果我不能使用“this”来做的话,我如何从它的click方法中引用clickers的count属性?

  • 本文向大家介绍JavaScript通过this变量快速找出用户选中radio按钮的方法,包括了JavaScript通过this变量快速找出用户选中radio按钮的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript通过this变量快速找出用户选中radio按钮的方法。分享给大家供大家参考。具体分析如下: 下面的JS代码通过this变量结合radio按钮的onchange

  • 通常创建对象来表示真实世界中的实体,如用户和订单等: let user = { name: "John", age: 30 }; 并且,在现实世界中,用户可以进行 操作:从购物车中挑选某物、登录和注销等。 在 JavaScript 中,行为(action)由属性中的函数来表示。 方法示例 刚开始,我们来教 user 说 hello: let user = { name: "John",

  • 本文向大家介绍JS中改变this指向的方法(call和apply、bind),包括了JS中改变this指向的方法(call和apply、bind)的使用技巧和注意事项,需要的朋友参考一下 this是javascript的一个关键字,随着函数使用场合不同,this的值会发生变化。但是总有一个原则,那就是this指的是调用函数的那个对象。 this一般指向的是当前被调用者,但也可以通过其它方式来改变它