1
Google 구아바를 사용하여 개체를 캐시하는 프로그램을 작성했습니다. 내 문제는 Guava Load 메서드에 추가 매개 변수를 전달하는 방법입니다. 여기에 코드가 있습니다. 아래에서이 줄을 보게됩니다. fileId와 pageno를 key - cache.get (fileID + pageNo);로 만들었습니다. 이제 cache.get이 호출되고 그 키가 캐시에 없을 때 - 구아바는 아래에 주어진 PreviewCacheLoader 클래스의 load 메소드를 호출합니다. 이는 위의 매개 변수를 전달하는 방법 구글 구아바 - 메서드를로드하는 매개 변수를 추가로 전달하십시오.
public class PreviewCache {
static final LoadingCache<String, CoreObject> cache = CacheBuilder.newBuilder()
.maximumSize(1000)
.expireAfterWrite(5, TimeUnit.MINUTES)
.build(new PreviewCacheLoader());
public CoreObject getPreview(String strTempPath, int pageNo, int requiredHeight, String fileID, String strFileExt, String ssoId) throws IOException
{
CoreObject coreObject = null;
try {
coreObject = cache.get(fileID+pageNo, HOW TO PASS pageNO and requiredHeight because I want to keep key as ONLY fileID+pageNo);
} catch (ExecutionException e) {
e.printStackTrace();
}
return coreObject;
}
}
키 매개 변수
public class PreviewCacheLoader extends CacheLoader<String, CoreObject> {
@Override
public CoreObject load(String fileIDpageNo, HOW TO GET pageNO and requiredHeight) throws Exception {
CoreObject coreObject = new CoreObject();
// MAKE USE OF PARAMETERS pageNO and requiredHeight
// Populate coreObject here
return coreObject;
}
} 우선 들어
감사합니다 Louis - 그렇다면이 두 가지가 필요합니까? 1. .build (새 PreviewCacheLoader()); 2. 전체 PreviewCacheLoader 클래스. 내가 이해 한 것은 호출 가능한 호출 메소드로 PreviewCacheLoader 클래스의 load 메소드의 로직을 이동해야한다는 것이다. 그 맞습니까 ? – user2565431
아니요,이 시점 이후에 더 이상 'CacheLoader'를 가질 필요는 없습니다. 단지'.build()'만 할 수 있습니다; 예, 모든 논리를 '호출 가능'으로 옮깁니다. –
좋은 답변입니다. 나는 hashCode()와 equals() 구현이 ** Required **를 FieldIdAndPageNo 클래스에 추가 할 것입니다. 그렇지 않으면 Cache는 2 개의 키를 같은 것으로 간주하지 않습니다. –