Это касается неизменяемого класса, который я создал. Это выглядит следующим образом:Определенный пользователем неизменяемый класс, дающий неожиданные результаты
final class ImmutableClass
{
private final Date d;
public ImmutableClass(Date d)
{
this.d=d;
}
public Date getD()
{
return this.d;
}
}
При использовании этого выше класс ниже в классе, как:
public class UserClass
{
public static void main(String args[])
{
Date d1 = new Date();
ImmutableClass im= new ImmutableClass(d1);
System.out.print("Date is : " + im.getD() + ", object is " + im);//printing originals
//trying to change the date
d1.setMonths("10");
System.out.print("New Date is : " + im.getD() + ",New object is " + im);//printing latter ones
}
}
Результат выглядит следующим образом:
Date is : Wed Dec 10 10:38:43 IST 2014, object is [email protected]
New Date is : Mon Feb 10 10:38:43 IST 2014,New object is [email protected]
Объект даты в ImmutableClass изменяется и даже объект тот же, новый объект не создается.
Это противоречит определению неизменяемых классов. Просьба указать, ошибаюсь ли я в своем подходе или я пропустил что-то относительно концепции неизменности ??
С уважением!
Это происходит только в случае Date объекта, в других случаях как String (класс), Int (примитивный) ... он возвращает исходные значения при вызове getXXX(), даже если мы изменим ссылочную переменную d .... почему поведение отличается? –
@sukhparmar Это происходит из-за ссылок на объекты (и передача ссылок по значению по-прежнему проходит ссылку). Строка неизменна. Как и примитивные и оберточные типы. –
теперь я получил его, класс coz Date изменен. Особое внимание должно быть уделено, возвращая его, как сказано, чтобы создать новый экземпляр. –