2016-09-06 4 views
0

В моем приложении мне нужно сделать мой класс неизменным, но в моем классе у меня есть объект другого класса, который изменен, может кто-нибудь предложить мне реализацию.Внедрение класса Immutable в Java

псевдокод:

Класс A, который я хотел бы, как неизменный класс

class A { 
    /* ... */ 

    //class B is mutable 
    B b = new B(); 
    /* ... */ 
} 
+0

Сделать б частные внутри экземпляра – vincentzhou

+0

... и 'final' –

ответ

2

Предполагая, что вам нужно, чтобы получить доступ b от внешнего мира, вам нужно будет обернуть все методы B и объявить тех, кто A. Кроме того, возьмите b в качестве параметра конструктора, без метода getter/setter.

class A{ 
    private final b; 
    A(B b){ 
    this.b = b;  
    } 
    public String getSomeValue(){ 
    return b.getSomeValue(); 
    } 

} 

Edit: Смотрите комментарий Hoopje»относительно клонирования b в конструкторе. Если clone или конструктора копирования не доступен на B, то вы должны построить новый B по своему усмотрению в A

+1

Вы должны сделать копию' b' в конструктор. Теперь вы можете сохранить ссылку на объект 'B' в другом месте и изменить объект после создания объекта' A', тем самым изменив неизменный объект 'A'. – Hoopje

+1

Кроме того, сделайте свой класс окончательным, чтобы запретить наследование –

Смежные вопросы