如何在Java中创建不可变对象?
应该将哪些对象称为不可变?
如果我有所有静态成员的类是不可变的?
必须是不可变对象的所有属性都是final?
据我说不.但我不知道,我是否正确.
由于这是当前的一个热门话题,我无法理解某些概念.请原谅我,如果我听起来很愚蠢,但当我尝试创建不可变对象的大部分帖子时,我发现了以下几点
现在我无法理解为什么我们需要以下几点
我在这里添加我的课程和测试用例:
    public final class ImmutableUser {
    private final UUID id;
    private final String firstName;
    private final String lastName;
    public ImmutableUser(UUID id, String firstName, String lastName) {
        super();
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
    }
    /**
     * @return the id
     */
    public UUID getId() {
        return id;
    }
    /**
     * @return the firstName
     */
    public String getFirstName() {
        return firstName;
    }
    /** …一般来说,我在 Java 中使用不可变对象的次数越多,我就越认为它们是一个好主意。从自动线程安全到无需担心克隆或复制构造函数,它们有很多优点。
这让我想到,“不可变”关键字会出错吗?显然,在语言中添加另一个保留字有一些缺点,我怀疑这主要是由于上述原因而实际上会发生 - 但忽略了我真的看不到很多缺点。
目前必须非常小心以确保对象是不可变的,即使这样,一个狡猾的 javadoc 评论声称一个组件对象是不可变的,而实际上它是不可变的,这可能会破坏整个事情。还有一种说法是,即使像字符串这样的基本对象也不是真正不可变的,因为它们很容易受到反射攻击。
如果我们有一个不可变的关键字,编译器肯定可以递归检查并给出一个铁一般的保证,即一个类的所有实例都是不可变的,这是目前无法做到的。尤其是随着并发越来越多,我个人觉得给这个效果加个关键字比较好。但是是否有任何我遗漏的缺点或实现细节使这成为一个坏主意?
我有一个对象:
Object obj = create();
...我需要设置此Object的一些属性:
obj.setParam("7696969", 0x506);
在此过程之后,我需要确保obj无法修改.
有没有办法设置obj为final不创建另一个final Object副本obj?
为什么当我将相同的对象添加到列表时:
Integer a = new Integer(0);
testList.add(a);
a += 1;
testList.add(a);
第一个没改变?