Pregunta

[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 entiendo este. Tengo un proyecto donde construyo un interceptor de almacenamiento en caché para Spring. Simplemente es una mirada por nombre de caché para apuntar a EhCache y usa aop-autoproxy para cargar CacheableAspect (que es mi interceptor de almacenamiento en caché). Ahora, cuando uso el valor predeterminado en la anotación, ANT me da el siguiente error de compilación. Intenté actualizar al último JDK (ahora estoy en 1.6 16) y establecer los niveles de origen / destino en el script de hormiga, pero no tuve éxito. Cuando elimino el valor predeterminado y fuerzo a todas las áreas a especificar un valor, se compila en ant fine.

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

¿Qué da? Intenté construir un proyecto (sin resorte) que simplemente hiciera eco de la configuración con ant y se compilara en ant fine (y en eclipse).

que me dice ¿QUIZÁS puede ser la primavera auto-proxy de alguna manera? pero entonces, ¿por qué el compilador no me da el nombre del 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;
 }
}
¿Fue útil?

Solución

Todavía está presente en JDK 6u25, pero agregar el paquete al valor predeterminado hace el truco:

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

Otros consejos

Echa un vistazo aquí: http://bugs.sun.com/view_bug.do?bug_id=6512707 Esta podría ser la causa de su problema.

Entonces, solo una pequeña 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 en torno al procesador de anotación en tiempo de compilación. Dado que la retención es RUNTIME, lo que significa que no requiere un procesador de anotación en tiempo de compilación, parece que el procesador de anotación en tiempo de compilación está haciendo explotar el proceso de compilación. Cada vez que estoy en NetBeans y tengo habilitadas las anotaciones de tiempo de compilación en Build- > Compilando en las propiedades del proyecto, recibo una serie nebulosa de errores.

Voy a intentar abrir un nuevo ticket de error para el problema y solo pensé en pasar la solución fácil por ahora.

Todavía presente usando javac 1.6.0_26. la solución alternativa de yurez de usar el nombre de tipo totalmente calificado cuando se especifica el valor predeterminado aún funciona.

Encontrado este error se resuelve en 1.6.0_31 y 1.7.0_03 (tal vez también en algunas versiones anteriores), así que solo actualice el compilador de Java.

Me pregunto si esto se debe a la definición de Cacheable y CacheType en el mismo archivo fuente, y luego a la importación de "com.io.CacheType". Eso podría hacer que el compilador piense que hay dos clases llamadas "com.io.CacheType".

¿Podría publicar el archivo fuente completo o algo así? El código que publicó parece copiado / pegado de diferentes archivos de origen y está lleno de errores tipográficos.

Normalmente, lo siguiente siempre debería funcionar cuando CacheType enum está en un archivo de origen diferente, tenía un error tipográfico en CacheType.COMMON:

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

Funciona con un nombre de tipo totalmente calificado.

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;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top