Это должно сделать что-то вроде следующего, если вы правильно определили методы getNameFromDatabase
и getApplicationDefaultName
. (метод setApplicationDefaultName
также должен быть определен для установки имени приложения для данного locationId)
private int id;
private String name =- "noname"; // default in source code?
public Location(int locationId) {
// ...
String appName = Location.getApplicationDefaultName();
String dbName = getNameFromDatabase(locationId);
if(dbName != null) {
this.name = dbName;
} else if (appName != null) {
this.name = appName;
} // else name will default to initially set value.
}
Когда вы присваиваете имя с помощью оператора this.name = getNameFromDatabase(locationId)
, вы перезаписываете значение, ранее присвоенное this.name
, поэтому ваш случай 1 не будет реализован. Ваша логика для назначения имени (или любого из ваших свойств с ожидаемым поведением, которое будет описано вашими пунктами 1,2 и 3) должна быть:
if (db has specific name)
use db specific name // point 3
else if (db has default name) // point 2
use db default name
else
don't overwrite source code name //point 1
Редактировать
Один из способов отделить задачу получения значения базы данных по умолчанию от практики, которую вы используете для получения этого значения (один раз на ВМ, каждый раз или просто иногда в зависимости от фазы луны), - использование Стратегия Дизайн шаблона. Интерфейс RetrievalMethod
должен иметь один метод, getDefaultFromDatabase()
, поведение которого может быть задано разработчиками. При этом метод getApplicationDefaultName
вашего местоположения (вместе с методом настройки стратегии RetrievalMethod
) будет выглядеть следующим образом:
private RetrievalMethod myLocationRetriever = GenericRetrievalMethod(/*...*/);
// ...
public void setLocationRetrievalMethod(RetrievalMethod retr) {
myLocationRetriever = retr;
}
// ...
private String getApplicationDefaultName() {
myLocationRetriever.getDefaultFromDatabase();
}
В соответствии со спецификациями вашего приложения вы можете установить myLocationRetriever
на соответствующее поведение.