У меня очень странная проблема.
Свойство класса таинственным образом сбрасывается между вызовами методов.
Следующий код выполняется, поэтому вызывается конструктор, а затем вызывается метод parseConfiguration.Наконец, вызывается processData.
Метод parseConfiguration устанавливает для свойства "recursive" значение "true".Однако, как только он входит в «processData», «recursive» становится «false».
Эта проблема не изолирована ни для одного класса - у меня есть несколько примеров этого в моем коде.
Как это может происходить?Я пытался инициализировать свойства, когда они объявлены вне каких-либо методов, я пытался инициализировать их в конструкторах ... ничего не работает.
Единственное осложнение, о котором я могу думать, это то, что этот класс вызываетсяобъект, который запускается в потоке - но здесь есть один экземпляр для каждого потока, поэтому, конечно, нет никаких шансов, что потоки вмешиваются.Я пытался настроить оба метода на «синхронизацию», но это все еще происходит.
Я на JDK 1.6.0_19 на Linux.
Пожалуйста, помогите!
/**
* This class or its superclasses are NOT threaded and don't extend Thread
*/
public class DirectoryAcquirer extends Manipulator
{
/**
* @var Whether to recursively scan directories
*/
private boolean recursive = false;
/**
* Constructor
*/
public DirectoryAcquirer()
{
}
/**
* Constructor that initialises the configuration
*
* @param config
* @throws InvalidConfigurationException
*/
public DirectoryAcquirer(HierarchicalConfiguration config) throws InvalidConfigurationException
{
super(config);
}
@Override
protected void parseConfiguration() throws InvalidConfigurationException
{
// set whether to recurse into directories or not
if (this.config.containsKey("recursive"))
{
// this.recursive gets set to "true" here
this.recursive = this.config.getBoolean("recursive");
}
}
@Override
public EntityCollection processData(EntityCollection data)
{
// here this.recursive is "false"
this.logger.debug("processData: Entered method");
}
}