Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.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 公共最终字段vs getter/setter?_Java - Fatal编程技术网

Java 公共最终字段vs getter/setter?

Java 公共最终字段vs getter/setter?,java,Java,有此代码: public class MouseEvent extends Event { private int x, y; private boolean dragged; public MouseEvent(int x, int y, boolean dragged) { super(Event.TYPE.MOUSE_MOVED); this.x = x; this.y = y; this.drag

有此代码:

public class MouseEvent extends Event {

    private int x, y;
    private boolean dragged;

    public MouseEvent(int x, int y, boolean dragged) {
        super(Event.TYPE.MOUSE_MOVED);
        this.x = x;
        this.y = y;
        this.dragged = dragged;
    }

    public int getX() {
        return x;
    }
    public int getY() {
        return y;
    }
}
有人告诉我,“为什么你要使用访问器而不仅仅是公共最终字段?”这让我很困惑

我到底错过了什么?我的意思是,这些观念完全不同。

tl;博士 这些是完全不同的观念

不,它们并不是完全不同

它们是实现相同目标的两种方法:公开对象的属性

int x = myMouseEvent.getX() ;
…具有与…相同的效果

int x = myMouseEvent.x ;
细节 由于无法将对象重新分配给三个类成员字段中的任何一个,并且没有其他复杂性,因此提供getter方法的效果与直接访问公共最终成员的效果完全相同

无论哪种方式,如果您确实希望永远不要将成员变量重新分配给备用对象,那么您应该通过将变量标记为
final
来强制并记录该意图。这意味着它们实际上并不是变量,因为它们的内容(对特定对象的引用)在该对象的生命周期中永远不会变化

至于定义访问器getter方法,这只有在您现在或以后可能返回除包含的对象引用之外的其他内容时才有用。例如,如果您需要安全检查,或者需要计算结果,或者需要生成格式化响应,那么您需要一个getter方法来编写这样的代码


Java中getter/setter方法的另一个好处是,您的对象可以被视为用于公开属性的对象,而无需构建
BeanInfo
。这在诸如在web应用程序的小部件中显示对象之类的情况下非常方便。

您能否提供一些代码示例以澄清一些问题?