Подтвердить что ты не робот

Несовместимые типы: required: default enums в аннотациях

[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 (который является моим кэширующим intercepter). Теперь, когда я использую значение по умолчанию в аннотации, ANT дает мне ошибку компилятора ниже. Я попробовал обновление до последнего JDK (теперь я на 1.6 16) и устанавливаю исходные/целевые уровни в ANT script, но не добился успеха. Когда я удаляю значение по умолчанию и заставляю все области указывать значение, оно компилируется в ANT fine.

Он всегда работал в Eclipse, у меня были модульные тесты, которые отлично сочетались с предыдущим значением по умолчанию.

Что дает? Я попытался создать проект (no spring), который просто повторил конфигурацию с помощью ANT и скомпилировал его в ANT fine (и в eclipse).

который говорит мне MAYBE, это может быть как-то w872 > автопроксирование? но тогда почему компилятор не дал мне сгенерированное имя типа? 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;
 }
}
4b9b3361

Ответ 1

Все еще присутствует в JDK 6u25, но добавление пакета к значению по умолчанию делает трюк:

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

Ответ 3

Итак, просто небольшое обновление. Хотя трекер ошибок показывает ошибку как закрытую и, кажется, хочет опровергнуть любые новые открытия ошибки. Когда я столкнулся с этой ошибкой в ​​этом примере, он вращается вокруг процессора комментариев времени компиляции. Поскольку сохранение является RUNTIME, что означает, что он не требует компиляционного обработчика аннотации времени, кажется, что обработчик аннотации времени компиляции раздувает процесс компиляции. Всякий раз, когда я нахожусь в NetBeans, и у меня есть компиляция аннотаций времени, включенных в Build- > Compiling в свойствах проектов, я получаю туманную последовательность ошибок.

Я собираюсь попытаться открыть новый биг-код для этой проблемы, и просто подумал, что сейчас перейду к простому обходному пути.

Ответ 4

Все еще присутствует с помощью javac 1.6.0_26. yurez обходного пути использования полного имени типа при указании значения по умолчанию все еще работает.

Ответ 5

Найдено эта ошибка решена в 1.6.0_31 и 1.7.0_03 (возможно, также в некоторых предыдущих версиях), поэтому просто обновите java-компилятор.

Ответ 6

Интересно, это вызвано определением Cacheable и CacheType в том же исходном файле, а затем импортированием "com.io.CacheType". Это могло бы заставить компилятор думать, что есть два класса, называемых "com.io.CacheType".

Ответ 7

Не могли бы вы опубликовать весь исходный файл или что-то еще? Вывешенный вами код кажется скопированным/вставленным из разных исходных файлов и заполнен опечатками.

Обычно следующее правило должно всегда делать трюк, когда перечисление CacheType находится в другом исходном файле, у вас была опечатка в CacheType.COMMON:

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

Ответ 8

Работает с полным именем типа.

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