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

我真的不懂这个。 我有一个项目,我自定义为Spring构建一个缓存拦截器。它只是通过缓存名称来指向EhCache并使用aop-autoproxy来加载CacheableAspect(这是我的缓存拦截器)。现在,当我在注释中使用默认值时,ANT会在下面给出编译器错误。我尝试更新到最新的JDK(我现在在1.6 16)并在ant脚本中设置源/目标级别但没有成功。当我删除默认值并强制所有区域指定一个值时,它会在ant中编译。

它始终在Eclipse中运行,我的单元测试与之前的默认值完美匹配。

是什么给出的?我尝试构建一个项目(没有弹簧),简单地用ant回显配置,并在ant fine(和eclipse)中编译。

告诉我可能它可能是春天的自动代理吗?但那么为什么编译器不会给我生成的类型名称? GRRRR。有什么想法吗?

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;
 }
}
有帮助吗?

解决方案

仍然存在于JDK 6u25中,但是将软件包添加到默认值就可以了:

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

其他提示

看看这里: http://bugs.sun.com/view_bug.do?bug_id=6512707 这可能是你问题的原因。

所以只需要一点点更新。虽然bug跟踪器显示bug已关闭,但似乎想要反驳bug的任何新开口。当我在这个例子中遇到这个错误时,围绕编译时注释处理器。由于保留是RUNTIME,这意味着它不需要编译时注释处理器,看起来编译时注释处理器正在炸毁编译过程。每当我在NetBeans中并且我在Build->在项目属性中编译时启用了编译时注释时,我会收到一系列错误的错误。

我打算尝试为这个问题打开一个新的错误机票,我想我现在就会传递一个简单的解决方法。

仍然使用javac 1.6.0_26。 yurez在指定默认值时使用完全限定类型名称的解决方法仍然有效。

发现此错误已在1.6.0_31和1.7.0_03中解决(可能也在某些先前版本中),因此只需升级java编译器。

我想知道这是否是由于在同一源文件中定义Cacheable和CacheType,然后导入“com.io.CacheType”引起的。可以想象,编译器认为有两个类叫做“com.io.CacheType”。

你能发布整个源文件吗?您发布的代码似乎是从不同的源文件中复制/粘贴的,并且充满了拼写错误。

通常情况下,当CacheType枚举位于不同的源文件中时,下面应该总是这样做,你在CacheType.COMMON中输入错误:

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

使用完全限定的类型名称。

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;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top