2017-09-20 4 views
0

erreur magique apparaît lorsque vous essayez de créer le cache de goyave:génériques cache Goyave erreur

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(); 

} 

erreur de compilation java:

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> 

version goyave est 20.0 version java est 1.6

en utilisant java 1.8 et goyave 23.0 - c'est OK!

Le problème est que je dois utiliser seulement 1,6 java

+0

Comportement extrêmement magique que j'ai jamais vu – user2602807

Répondre

1

Certaines solution de contournement, vous pouvez utiliser:

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(); 
1

Comme vous l'avez mentionné fonctionne sur 8 JDK en raison de enhancements in type inference qui ont été introduits dans that version.

Sur JDK 6 vous obtenez incompatibilité de type:

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

, car le type de cache ne peut pas être déduit sans un soupçon de type.

+0

C'est de l'acier confus en extrayant une variable supplémentaire pour se débarrasser du problème. Et il n'y a pas de moyen simple d'initialiser LoadingCache comme carte hors de la boîte – user2602807

+0

@Xaerxess J'ai une question [ici] (https://stackoverflow.com/questions/46900147/send-record-and-wait-for-its- accusé de réception) dans lequel j'utilise goyave et je ne suis pas sûr que ces opérations fonctionnent correctement ou pas si voulu pour voir si vous pouvez m'aider. – john