Java访问器/变异器-编程表单
我刚开始一个项目,包括为你做一些人工智能 我被要求使用java,一种我几乎没有经验的语言 我有几个关于访问器和变异器的问题Java访问器/变异器-编程表单,java,Java,我刚开始一个项目,包括为你做一些人工智能 我被要求使用java,一种我几乎没有经验的语言 我有几个关于访问器和变异器的问题 使用访问器/变异器的好处是什么?我不明白这一点 我有一块由瓷砖组成的木板。我做了一个黑板班和瓷砖班。board对象由多维分片数组组成。board类中tile的mutator应该设置数组,还是数组中的每个tile都应该设置两个额外的坐标参数?什么是更好的编程形式 谢谢 使用访问器/变异器的好处是什么 有很多: 将状态隐藏在getter和setter之后,可以更灵活地更改类状
- 将状态隐藏在getter和setter之后,可以更灵活地更改类状态的内部表示,而不会破坏使用该状态的其他类
- getter和setter允许类在访问或修改状态时执行操作。例如,setter可以在设置之前进行验证、触发事件等。getter可以返回数组或集合属性的副本,以避免类状态暴露于意外(或故意/恶意-见下文)更改的可能性
- 可以同步getter和setter
- getter和setter(如果根据“javabean”规则实现)支持各种对象“连接”框架
- 任何半体面的JavaIDE都可以在几次击键后为属性生成一个getter/setter对。如果让IDE生成getter和setter,它们也不会有问题
- 虽然getter和setter会使源代码文件变大,但在阅读代码时通常不需要注意它们。IDE在这方面也有帮助
- 在运行时,简单的getter和setter将内联,因此性能与直接读取或写入公共属性没有区别
private
属性的状态不会被安全隐藏…除非您还可以防止任何不受信任的代码使用反射。但是,如果您处于这种情况,我的观点是t只有返回的副本才是安全关键的。]
我有一块由瓷砖组成的木板。我做了一个板
类和瓷砖
类。board对象由多维分片数组组成。board类中tile的mutator应该设置数组,还是数组中的每个tile都应该设置两个额外的坐标参数?什么是更好的编程形式
如果没有更多细节,我会说Board
类应该有以下方法:
public void setTileAt(Tile tile, int x, int y) {...}
public Tile getTileAt(int x, int y) {...}
public void setTiles(Tile[][] tiles {...}
public Tile[][] getTiles() {...}
您可能不应该有以下方法:
public void setTileAt(Tile tile, int x, int y) {...}
public Tile getTileAt(int x, int y) {...}
public void setTiles(Tile[][] tiles {...}
public Tile[][] getTiles() {...}
因为它们(最有可能)将Board
类的内部内容暴露给应用程序中(理想情况下)不需要了解它们的部分
根据应用程序的详细信息,可能适合使用som类型的点
类,而不是一对(向量)整型电路板坐标
显然,如果你试图实现一个游戏玩算法,需要检查大量的游戏状态以找出“最佳”动作,那么你可能想在性能的名义上妥协。但这种“微观优化”通常是个坏主意
使用访问器/变异器的好处是什么
有很多:
- 将状态隐藏在getter和setter之后,可以更灵活地更改类状态的内部表示,而不会破坏使用该状态的其他类
- getter和setter允许类在访问或修改状态时执行操作。例如,setter可以在设置之前进行验证、触发事件等。getter可以返回数组或集合属性的副本,以避免类状态暴露于意外(或故意/恶意-见下文)更改的可能性
- 可以同步getter和setter
- getter和setter(如果根据“javabean”规则实现)支持各种对象“连接”框架
- 任何半体面的JavaIDE都可以在几次击键后为属性生成一个getter/setter对。如果让IDE生成getter和setter,它们也不会有问题
- 虽然getter和setter会使源代码文件变大,但在阅读代码时通常不需要注意它们。IDE在这方面也有帮助
- 在运行时,简单的getter和setter将内联,因此性能与直接读取或写入公共属性没有区别
private
属性的状态不会被安全隐藏…除非您还可以防止任何不受信任的代码使用反射。但是,如果您处于这种情况,我的观点是t只有返回的副本才是安全关键的。]
我有一块由瓷砖组成的木板。我做了一个板
类和瓷砖
类。board对象由多维分片数组组成。board类中tile的mutator应该设置数组还是arr中的每个tile