В java
все объект могут быть mutable
и immutable
. Понятно, что, например, строка является immutable
. Но если я хочу создать собственный immutable
тип, то какие требования он должен выполнять ?
У меня есть такой пример:
public class ImmutableObject {
private final String string;
private final Date date;
public ImmutableObject(String string, Date date) {
this.string = string;
this.date = date;
}
public Date getDate() {
return new Date(date.getTime());
}
public String getString() {
return string;
}
}
Могу ли я его считать неизменяемым ? Обязательно ли поля должны быть final
? И если одно из полей, например строка, не будет final
, то объект данного класса можно считать неизменным ? Учитывает ли данный класс все подводные камни многопоточности ?
Да, поля обязательно должны быть final
.
Я бы не поставил знак равенства между между Immutable объектом и объектом, имеющим методы только для чтения. Дело в том, что в качестве оптимизации, компилятор может запросто переставлять строки с инструкциями, это так называемый reordering. В результате может получиться так, что ваш объект будет доступен из других потоков, но его переменные могут не быть проинициализированы. В однопоточных приложениях это в принципе не страшно, но вот если вы работаете в многопоточной среде, то final защитит ваши переменные от таких перестановок.
Теперь по существу ваших вопросов:
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Здравствуйте! Второй день пытаюсь пофиксить проблемуВ проекте пытаюсь достать данные из базы, но вылетает NullPointerException
Всем доброго дня! Сервер написан на Java + Spring framework + PostgresqlМне нужно выдавать JSON такого вида:
Как определить штат по координатам, без запросов к google mapЖелательно оффлайн