Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java访问器/变异器-编程表单_Java - Fatal编程技术网

Java访问器/变异器-编程表单

Java访问器/变异器-编程表单,java,Java,我刚开始一个项目,包括为你做一些人工智能 我被要求使用java,一种我几乎没有经验的语言 我有几个关于访问器和变异器的问题 使用访问器/变异器的好处是什么?我不明白这一点 我有一块由瓷砖组成的木板。我做了一个黑板班和瓷砖班。board对象由多维分片数组组成。board类中tile的mutator应该设置数组,还是数组中的每个tile都应该设置两个额外的坐标参数?什么是更好的编程形式 谢谢 使用访问器/变异器的好处是什么 有很多: 将状态隐藏在getter和setter之后,可以更灵活地更改类状

我刚开始一个项目,包括为你做一些人工智能

我被要求使用java,一种我几乎没有经验的语言

我有几个关于访问器和变异器的问题

  • 使用访问器/变异器的好处是什么?我不明白这一点
  • 我有一块由瓷砖组成的木板。我做了一个黑板班和瓷砖班。board对象由多维分片数组组成。board类中tile的mutator应该设置数组,还是数组中的每个tile都应该设置两个额外的坐标参数?什么是更好的编程形式
  • 谢谢

    使用访问器/变异器的好处是什么

    有很多:

    • 将状态隐藏在getter和setter之后,可以更灵活地更改类状态的内部表示,而不会破坏使用该状态的其他类

    • getter和setter允许类在访问或修改状态时执行操作。例如,setter可以在设置之前进行验证、触发事件等。getter可以返回数组或集合属性的副本,以避免类状态暴露于意外(或故意/恶意-见下文)更改的可能性

    • 可以同步getter和setter

    • getter和setter(如果根据“javabean”规则实现)支持各种对象“连接”框架

    而getter和setter的缺点是最小的:

    • 任何半体面的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”规则实现)支持各种对象“连接”框架

    而getter和setter的缺点是最小的:

    • 任何半体面的JavaIDE都可以在几次击键后为属性生成一个getter/setter对。如果让IDE生成getter和setter,它们也不会有问题

    • 虽然getter和setter会使源代码文件变大,但在阅读代码时通常不需要注意它们。IDE在这方面也有帮助

    • 在运行时,简单的getter和setter将内联,因此性能与直接读取或写入公共属性没有区别

    [我对“蓄意/恶意”的补充意见]只有当您的代码可能被安全沙箱中不受信任的代码调用时,才会对公开的数组和集合进行更改。正如评论员指出的,
    private
    属性的状态不会被安全隐藏…除非您还可以防止任何不受信任的代码使用反射。但是,如果您处于这种情况,我的观点是t只有返回的副本才是安全关键的。]

    我有一块由瓷砖组成的木板。我做了一个
    类和
    瓷砖
    类。board对象由多维分片数组组成。board类中tile的mutator应该设置数组还是arr中的每个tile