package com.brightgenerous.poi.reader; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; public abstract class LoadableSheetCollector<T> extends AbstractSheetCollector<T> { private volatile T obj; private volatile boolean loaded; @Override public T getProcess() { if (!loaded) { synchronized (this) { if (!loaded) { obj = load(getWorkbook(), getSheet()); loaded = true; } } } return obj; } protected abstract T load(Workbook workbook, Sheet sheet); }