Pergunta

[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;

Eu realmente não receber um presente. Eu tenho um projeto onde eu estou personalizado construção de um interceptor de cache para a Primavera. Ele simplesmente é um olhar pelo nome de cache para apontar para EhCache e usos aop-autoproxy para carregar o CacheableAspect (que é o meu cache intercepter). Agora, quando eu usar o valor padrão na anotação, ANT me dá o erro do compilador abaixo. Eu tentei atualizar para a última JDK (eu estou em 1.6 16 agora) e definir níveis de origem / destino no script ant, mas sem sucesso. Quando eu remover o valor padrão e forçar todas as áreas para especificar um valor, ele compila in fine formiga.

Ele sempre trabalhou em Eclipse, tive testes de unidade que correu perfeitamente com o valor padrão anterior.

O que dá? Tentei construir um projeto (sem molas) que simplesmente repetiu a configuração com formiga e compilado in fine formiga (e em eclipse).

que me diz que talvez ele poderia ser a mola de auto-proxy alguma forma? mas então por que o compilador não me dar o nome do tipo gerado? GRRRR. Quaisquer pensamentos?

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;
 }
}
Foi útil?

Solução

Ainda presente no JDK 6u25, mas a adição de pacote para o valor padrão faz o truque:

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

Outras dicas

Dê uma olhada aqui: http://bugs.sun.com/view_bug.do?bug_id=6512707 esta pode ser a causa do seu problema.

Então, basta um pouco de atualização. Enquanto o bug tracker mostra o bug como fechada e parece querer refutar quaisquer novas aberturas do bug. Quando eu encontrei este bug neste exemplo gira em torno do processador de anotação tempo de compilação. Desde a retenção é RUNTIME o que significa que não requer um processador de anotação tempo de compilação parece que a anotação processer tempo de compilação está fundindo-se o processo de compilação. Sempre que estou em NetBeans e eu tenho anotações do tempo de compilação ativada em Build-> Compilando nas propriedades projetos que eu receber uma série nebulosa de erros.

Eu estou indo para tentar abrir um novo ticket de bug para o problema e apenas pensei que eu iria passar a solução fácil para agora.

Ainda apresentar usando javac 1.6.0_26. solução de yurez de usar o nome de tipo totalmente qualificado ao especificar o valor padrão ainda funciona.

Encontrei este bug é resolvido em 1.6.0_31 e 1.7.0_03 (talvez também em algumas versões anteriores), então basta atualizar o compilador Java.

Gostaria de saber se isso é causado pela definição Cacheable e CacheType no mesmo arquivo de origem e, em seguida, importando "com.io.CacheType". Que poderiam vir a fazer o compilador acha que há duas classes chamados "com.io.CacheType".

Você poderia postar o arquivo de origem inteira ou algo assim? O código que você postou parece copiar / colar a partir de diferentes arquivos de origem e está cheio de erros.

Normalmente, o seguinte deve sempre fazer o truque quando CacheType enumeração está em um arquivo de origem diferente, você teve um erro de digitação no CacheType.COMMON:

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

Funciona com um nome de tipo totalmente qualificado.

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top