Java 最终变量的getter

Java 最终变量的getter,java,oop,getter,Java,Oop,Getter,现在我正在创建一个类负载,这些类将保存我的配置,就是这样。我所做的就是存储配置文件中的值 超过一半的代码是getter,我想知道实践是仍然使用getter还是直接访问变量 因此: public myClass { public myClass(String name) { this.name = name; } final String name; public final String getName() {

现在我正在创建一个类负载,这些类将保存我的配置,就是这样。我所做的就是存储配置文件中的值

超过一半的代码是getter,我想知道实践是仍然使用getter还是直接访问变量

因此:

public myClass
{
    public myClass(String name)
    {
        this.name = name;
    }

    final String name;

    public final String getName()
    {
        return name;
    }
}
或:


让所有的getter都在那里,而他们实际上什么都不做,只是返回变量,这看起来真的很愚蠢。但是有人告诉我,无论如何,将getter放在其中是常见的Java实践。

用getter封装数据可以提供几个优点,包括:

  • 您可以将该字段更改为其他表示形式,而不会影响调用者
  • 您可以在getter中添加其他代码
  • 您可以实现一个提供getter的接口
  • 您可以提供对字段的只读访问,即使这些字段不是
    final

我知道的做法是,您可以使用公共静态final字段和不可变类型,例如
System.out
。不过,我确实向实例字段添加了getter


我同意你的观点,尽管公开最后一个
字符串
几乎没有什么害处。不过,要注意可变类型。此外,由于IDE中有内联和代码生成,因此getter的成本往往很低,无论是在编写代码还是在运行时。

编译器都将内联它们。虽然我会利用
java.util.Properties
来完成您正在做的事情。对于final变量,这看起来可能很愚蠢,但是如果您有非final变量,并且子类定义了相同的变量名,并且您尝试访问这些变量,那么您将看到,如果没有get/set,它会多么混乱。正确的封装始终是最佳实践。@jlordo这是我给出的一个非常简单的示例
Properties
绝对不适合我所做的:)顺便说一句,作为
private
您的第一个示例,看到支持getter/setter的响应,我想说的是,最新的Bean处理也可以在没有getter的情况下立即在字段上工作。在某些情况下,盲目使用getter,尤其是setter甚至可能是一种反模式。如果你能侥幸逃脱,那就去经济直接领域吧。可能以后会重构到getter/setters。最重要的原因是您在回答中解释了这一点。@LuiggiMendoza您能进一步解释getter/setters的耦合吗?将更多代码耦合到类的表示形式会使更改该表示形式的工作更为繁重。封装将内部表示隐藏在接口后面,接口可以随着表示的更改而保持不变。@KevinBowersox检查Andy的最后一条注释。
public myClass
{
    public myClass(String name)
    {
        this.name = name;
    }

    public final String name;
}