2017-09-20 11 views
0

마법 오류가 나타납니다구아바 캐시 제네릭 오류

import com.google.common.cache.CacheBuilder; 
import com.google.common.cache.CacheLoader; 

import java.util.concurrent.ConcurrentMap; 

public class Main { 

    private static ConcurrentMap<Long, Object> cache = CacheBuilder 
      .newBuilder() 
      .build(new CacheLoader<Long, Object>() { 
       @Override 
       public Object load(Long key) throws Exception { 
        return null; 
       } 
      }).asMap(); 

} 

자바 컴파일 오류 : 사용하는 동안 1.6

Error:(17, 21) java: C:\JavaWorkspace\untitled\src\...\Main.java:17: incompatible types 
found : java.util.concurrent.ConcurrentMap<java.lang.Object,java.lang.Object> 
required: java.util.concurrent.ConcurrentMap<java.lang.Long,java.lang.Object> 

구아바 버전이 20.0 자바 버전입니다 자바 1.8 및 구아바 23.0 - 괜찮습니다!

private static LoadingCache<Long, Object> cache = CacheBuilder 
     .newBuilder() 
     .build(new CacheLoader<Long, Object>() { 
      @Override 
      public Object load(Long key) throws Exception { 
       return null; 
      } 
     }); 

private static ConcurrentMap<Long, Object> cacheMap = cache.asMap(); 
+0

나는 지금까지 본 마법 습관이 – user2602807

답변

1

사용할 수있는 몇 가지 해결 방법을 사용할 필요가있다.

found : ConcurrentMap<Object, Object> 
required: ConcurrentMap<Long, Object> 

cache의 유형이 유형의 힌트없이 유추 할 수 없기 때문에 : JDK 6에

당신은 형식이 일치를 얻을.

1

당신이 그것을 that version에 도입 된 때문에 enhancements in type inference의 JDK 8에서 작동 언급 한 바와 같이 :

문제는 내가 1.6 자바

+0

문제를 없애기 위해 추가 변수를 추출하는 동안 강철이 혼란 스럽다. 그리고 LoadingCache를 상자에서 꺼내서 초기화하는 간단한 방법이 없습니다. – user2602807

+0

@Xaerxess 질문이 있습니다. [https://stackoverflow.com/questions/46900147/send-record-and-wait-for-its- 수신 확인)에서 구아바를 사용하고 있으며 이러한 작업이 올바르게 작동하는지 여부를 알지 못해서 나를 도울 수 있는지 확인하고 싶습니다. – john