這是本文件的舊版!


File Changed Cache

package org.tonylin.practice.guava.cache;
 
import java.io.File;
 
import com.google.common.base.Supplier;
 
public class ExpiredFileMemorizeSupplier<T> implements Supplier<T> {
 
	private File mFile;
	private Supplier<T> mDelegate;
	private long mLastModified = 0;
	private transient volatile T value;
 
	public ExpiredFileMemorizeSupplier(IFileDataSupplier<T> delegate){
		mFile = delegate.getFile();
		mDelegate = delegate;
	}
 
	public ExpiredFileMemorizeSupplier(Supplier<T> delegate, File file){
		mFile = file;
		mDelegate = delegate;
	}
 
	@Override
	public T get() {
		long lastModified = mFile.lastModified(); 
		synchronized (this) {
			if( lastModified != mLastModified ) {
				mLastModified = lastModified;
				value = mDelegate.get(); 
			}
			return value;	
		}
	}
}
package org.tonylin.practice.guava.cache;
 
import java.io.File;
 
import com.google.common.base.Supplier;
 
public interface IFileDataSupplier<T> extends Supplier<T> {
	File getFile();
}