2009-09-15 14 views
12
[javac] C:\ws\galileo\test\Cacheable.java:13: incompatible types 
[javac] found : com.io.CacheType 
[javac] required: com.io.CacheType 
[javac] public CacheType id() default CacheType.COMMON; 

Realmente no obtengo este. Tengo un proyecto en el que estoy creando un interceptor de almacenamiento en caché para Spring. Simplemente es un look por nombre de caché para apuntar a EhCache y utiliza aop-autoproxy para cargar el CacheableAspect (que es mi interceptador de caché). Ahora cuando uso el valor predeterminado en la anotación, ANT me da el error de compilación a continuación. Traté de actualizar al último JDK (estoy en 1.6 16 ahora) y establecer los niveles de origen/destino en el script ant pero no tuve éxito. Cuando elimino el valor predeterminado y fuerzo todas las áreas para especificar un valor, se compila en ant fine.tipos incompatibles encontrados: requerido: enumeraciones predeterminadas en las anotaciones

Siempre funcionó en Eclipse, tuve pruebas unitarias que funcionaban perfectamente con el valor predeterminado anterior.

¿Qué ofrece? Traté de construir un proyecto (sin resorte) que simplemente repitiera la configuración con la hormiga y se compilara en ant fine (y en eclipse).

que me dice ¿QUIZÁ podría ser la primavera de auto-proxying de alguna manera? pero entonces ¿por qué el compilador no me da el nombre de tipo generado? GRRRR. ¿Alguna idea?

import java.lang.annotation.ElementType; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 
import java.lang.annotation.Target; 

import com.io.CacheType; 

@Retention(RetentionPolicy.RUNTIME) 
@Target({ElementType.METHOD}) 
public @interface Cacheable { 
public CacheType value() default Cachetype.COMMON; 
} 

public enum CacheType { 

COMMON("common"), 
PERSISTENT("persistent"; 

private String cache; 

CacheType(String cache) { 
    this.cache = cache; 
} 

public String cache() { 
    return this.cache; 
} 
} 

Respuesta

18

todavía está presente en el JDK 6u25, pero añadiendo el paquete al valor por defecto es el truco:

CacheType value() default com.io.CacheType.COMMON; 
+1

esto me salvó un poco de tiempo, ¡gracias! – Art

+0

en JDK 1.6.0_31 o 1.7.0_03 este error está solucionado (ver respuesta a continuación) – rurouni

+1

Desbordamiento de pila, te amo. Tú también @yurez. – snappieT

0

Me pregunto si esto es causado por la definición cacheable y CacheType en el mismo archivo de origen, y luego importar "com.io.CacheType". Es concebible que el compilador crea que hay dos clases llamadas "com.io.CacheType".

0

¿Podría publicar todo el archivo fuente o algo así? El código que publica parece copiar/pegar desde diferentes archivos fuente y está lleno de errores tipográficos.

Normalmente el siguiente siempre debe hacer el truco cuando enumeración CacheType está en un archivo de origen diferente, uno tenía un error tipográfico en CacheType.COMMON:

public @interface Cacheable { 
public CacheType value() default CacheType.COMMON; 
} 
+0

Estaba en un archivo fuente diferente y tiene razón parece que tengo un error tipográfico. Lo publicaré cuando llegue a casa, ya que estoy trabajando ahora mismo. – Core

1

un vistazo aquí: http://bugs.sun.com/view_bug.do?bug_id=6512707 este podría ser el causa de tu problema

+0

La última Sun JDK (6u20) todavía tiene este error. La compilación con OpenJDK o JDT (parte de Eclipse) resolvió el problema para mí. JDT se puede utilizar fuera de eclipse (por ejemplo, en hormiga) detalles aquí: http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.jdt.doc.isv/guide/jdt_api_compile.htm. Para utilizar procesadores de anotación conectables necesitará org.eclipse.jdt.apt.pluggable.core .jar y org.eclipse.jdt.compiler.apt .jar en su classpath, estos se pueden encontrar en la carpeta de complementos del eclipse instalación. –

1

Así que solo un poco de actualización. Mientras que el rastreador de errores muestra el error como cerrado y parece querer refutar cualquier nueva apertura del error. Cuando encontré este error en este ejemplo, gira alrededor del procesador de anotación de tiempo de compilación. Dado que la retención es RUNTIME, lo que significa que no requiere un procesador de anotación de tiempo de compilación, parece que el proceso de compilación de anotación en tiempo de compilación está reventando el proceso de compilación. Cada vez que estoy en NetBeans y tengo anotaciones de tiempo de compilación habilitadas en Build-> Compilación en las propiedades de los proyectos, recibo una serie nebulosa de errores.

Voy a intentar abrir un nuevo ticket de error para el problema y simplemente pensé que pasaría la solución fácil por el momento.

+0

Abrí un nuevo error más actual. Esperemos que no solo cierren automáticamente como un duplicado. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7037412 – PaulSCoder

1

todavía presentes usando javac 1.6.0_26. La solución de yurez de usar el nombre de tipo completamente calificado cuando se especifica el valor predeterminado todavía funciona.

0

Funciona con un nombre de tipo completo.

import java.lang.annotation.ElementType; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 
import java.lang.annotation.Target; 

import com.io.CacheType; 

@Retention(RetentionPolicy.RUNTIME) 
@Target({ElementType.METHOD}) 
public @interface Cacheable { 
public CacheType value() default com.io.Cachetype.COMMON; 
} 
1

encontramos este fallo se resuelve en 1.6.0_31 y 1.7.0_03 (quizá también en algunas versiones anteriores), por lo que sólo actualizar el compilador Java.

+0

¿Fue error del compilador solamente o también JRE? El punto es, si lo compilo en 1.6.0u31 si funcionará en la versión anterior de JRE 1.6. – Gaim

+0

@Gaim es un error de compilación, no un error de JRE, así que adivina. –

Cuestiones relacionadas