与Immutable Class一起使用时,使用Java访问修饰符

时间:2016-11-22 08:36:54

标签: java immutability access

是否建议在final(Immutable)java类中为数据字段设置公共访问修饰符,即使数据字段不是对可变数据类型的引用或者我们应该直接访问数据字段,因为应该定义数据字段因此在构造函数本身中取消了更改类的内部表示的所有机会。 请提出建议?

例如:

public class MainApp {

    public static void main(String args[]) {

        Immutablesample immutablesample = Immutablesample.getInstance("akkhil");

        System.out.println(" Before modification " + immutablesample.getName());
        immutablesample.name = "gupta";
        System.out.println(" After modification " + immutablesample.getName());
    }

}

是试图通过直接访问(不使用访问修饰符)以下类来更改数据字段的调用代码:

public final class Immutablesample {


    private final String name;

    private Immutablesample(String name){
        this.name = name;
    }

    public String getName(){
        return name;
    }

    public static Immutablesample getInstance(String name){
        return new Immutablesample(name);
    }
}

如果我将修饰符从private更改为public,它将如何使类更容易获得其内部表示 私有字符串名称; to public String name; 由于对象是使用参数化构造函数创建的,因此具有不可变数据字段,为什么必须将数据字段设为私有?

2 个答案:

答案 0 :(得分:2)

要遵循两条简单的规则:

  1. 尽量让你的全班成为“不可变的”。例如,仅通过构造函数设置 private final 字段。当使用“传入”集合对象时,请考虑创建其内容的副本以确保安全。
  2. 请记住,好的OO是关于暴露行为;不是暴露数据。含义:除非你有充分的理由这样做,否则你绝对要想要公开字段。换句话说:你做希望其他一些B类做某事,因为A类中某些字段的内容。以及防止这种情况的方法:将你的字段设为私有!

答案 1 :(得分:1)

一般来说,显示一个类的内部表示是一个错误的决定,所以如果隐藏最终的不可变字段会更好。如果您的类类似于元组,那么您只能显示诸如字段之类的元素,其中所有成员都是从外部使用的。