繁体   English   中英

使用在公共 class 中声明的 class 成员定义的 getter/setter 将变量声明为私有是否有意义?

[英]Does it make sense to declare variables as private with getters/setters for class member definitions declared within a public class?

class Foo {
    String bar;
    // private String bar;
}

public class A {
    public void method1() {
        Foo foo = new Foo();
        // foo.bar; or foo.getBar(); which is preferable

    }
}

使用 class 成员定义的 getter/setter 将变量声明为私有是否有意义(例如, bar应该在Foo中声明为私有,还是应该只声明为String bar )? 我宁愿删除它们,因为无论如何都无法在此 class 之外访问它们。 什么会更可取?

如果仅用于数据访问,则没有 getter/setter 应该没问题(一些纯粹主义者可能不同意)。 并且您的 class 应该能够访问内部 class 的私有成员,因此您可以将它们保密。

使用 getter 和设置来访问/改变私有字段成员是标准的 OO 实践。 它允许 class 的内部工作在保持其公共接口的同时进行更改。

如果您通过将 bar 直接作为公共接口的一部分(通过使其公开)来访问/变异bar ,现在看起来可能很好,但是几个月后,当您决定要向bar添加一些验证时会发生什么? 也许您不希望bar被设置为null 你怎么能做到这一点? 如果您使用 getter 和 setter,您需要做的就是更改您的 setter 以在尝试将bar设置为null时抛出异常。 如果你直接改变bar ,你就不能这样做。 更彻底的是,您可能会决定不再需要该bar

Getter 和 setter 并不意味着 class 内部存在相同名称和类型的字段成员。 他们只告诉您 class 具有可以访问/变异的属性,并且没有说明 class 在内部执行该操作的方式。 这为您提供了很大的灵活性。

使 Foo 成为内部 class并且没有获取器/设置器:

public class A {
    private class Foo {
        String bar;
    }

    public void method1() {
        Foo foo = new Foo();
        foo.bar = "x";
    }
}

这是好的设计,因为 Foo 仅在 A 中可见 - 这并不比直接在 class 中访问私有字段而不是通过 getter 更糟糕。

请先回答:为什么method1需要了解foobar 为什么method1首先需要知道Foo甚至还有bar

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM