与不可变类一起使用时Java中的访问修饰符

与不可变类一起使用时Java中的访问修饰符,java,immutability,Java,Immutability,建议在最终(不可变)java类中为数据字段使用公共访问修饰符,即使数据字段不是对可变数据类型的引用,或者我们是否应该直接访问数据字段,因为数据字段应该在构造函数本身中定义,从而消除所有更改类的内部表示形式的机会。 请建议 例如: public class MainApp { public static void main(String args[]) { Immutablesample immutablesample = Immutablesample.getInst

建议在最终(不可变)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,如何使类易于更改其内部表示 私有字符串名称;到公共字符串名称;
既然对象是用参数化构造函数创建的,所以有不可变的数据字段,那么为什么有必要将数据字段设置为私有呢?

一般来说,显示类的内部表示形式是一个错误的决定,所以即使隐藏最后的不可变字段也会更好。如果类类似于元组,则只能显示例如字段,其中所有成员都是从外部使用的。

遵循两条简单规则:

  • 试着让你的整个班级尽可能“不变”。例如,仅通过构造函数设置私有最终字段。当使用“传入”集合对象时,考虑创建一个<>强>拷贝>强>它们的内容是真正安全的。
  • 请记住,好的OO是关于暴露行为的;不公开数据。意思是:你绝对不想公开字段,除非你有很好的理由这样做。换言之:你不想让其他B类因为A类中某个字段的内容而做某事。防止这种情况的方法是:将你的字段私有化
    你能举一两个例子吗?你没有使用标点符号和合适的术语,这使得你很难理解这个问题。你可以在这里找到所有细节:没有。数据字段应该始终是私有的和最终的。仅提供getter(如果需要,它可以返回可变实例的防御性副本),您是否询问是否可以创建不可变的
    final
    字段
    public
    ?如果是的话,是的,就不变性而言这是可以的,但是正如@GhostCat指出的,在声明类之外公开字段还有其他问题。下面是代码片段: