Frage

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

Ich weiß wirklich nicht, bekommen diese.Ich habe ein Projekt, wo ich bin, benutzerdefinierte Aufbau eines caching-interceptor für den Frühling.Es ist einfach, einen Blick durch cache-Namen Punkt-zu-EhCache und verwendet aop-autoproxy zum laden der CacheableAspect (das ist mein caching-intercepter).Wenn ich jetzt den Standardwert verwenden, der in der Anmerkung, ANT, gibt mir der compiler folgenden Fehler.Ich habe versucht, eine Aktualisierung auf die neueste JDK (ich bin auf 1,6 16) und festlegen von Quell - /Ziel-Ebenen in der ant-Skript, aber kein Erfolg.Wenn ich entfernen Sie die Standard Wert, und die Kraft, allen Bereichen, um einen Wert festzulegen, kompiliert er in ant in Ordnung.

Es funktionierte immer in Eclipse, ich hatte unit-tests ausgeführt, der perfekt mit dem vorherigen Standardwert.

Was gibt?Ich habe versucht, ein Projekt erstellen (keine Feder), die einfach hallten die Konfiguration mit ant und es kompiliert ant feine (und in eclipse).

das sagt mir, VIELLEICHT könnte es die Feder auto-proxying irgendwie?aber warum dann würde der compiler mir das nicht geben generiert Typ-Namen?GRRRR.Irgendwelche Gedanken?

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;
 }
}
War es hilfreich?

Lösung

Noch im JDK 6u25, aber das hinzufügen Paket default-Wert funktioniert der trick:

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

Andere Tipps

Haben einen Blick hier:http://bugs.sun.com/view_bug.do?bug_id=6512707 dies könnte die Ursache für Ihr problem.

Also nur ein kleines update.Während die bug-tracker zeigt den Fehler als geschlossen und scheint zu wollen, zu widerlegen, alle neuen öffnungen im bug.Wenn ich auf diese Fehler ist in diesem Beispiel dreht sich um die compile-Zeit annotation-Prozessor.Da die Vorratsdatenspeicherung LAUFZEIT, was bedeutet, dass es nicht erfordert eine Kompilierung annotation-Prozessor scheint es, dass der compile-Zeit-annotation-Prozessoren ist die Sprengung des kompilierprozesses.Immer, wenn ich in NetBeans und ich haben Kompilierung Anmerkungen aktiviert unter Build->Kompilieren in die Eigenschaften von Projekten erhalte ich eine nebulöse Reihe von Fehlern.

Ich werde versuchen, öffnen Sie ein neues bug-ticket für die Frage und dachte nur, ich würde, pass auf die einfache Problemumgehung für jetzt.

Noch vorhanden mit javac 1.6.0_26.yurez die Problemumgehung für die Verwendung der voll qualifizierte Typname bei der Angabe der default-Wert immer noch funktioniert.

Gefunden dieser Fehler wird gelöst in 1.6.0_31 und 1.7.0_03 (vielleicht auch in einigen früheren Versionen), so dass nur ein upgrade der java-compiler.

Ich Frage mich, ob es begründet ist dies durch die Definition Zwischengespeichert und CacheType in der gleichen Quelldatei, und dann importieren "com.io.CacheType".Das könnte unter Umständen machen die compiler denke, es gibt zwei Klassen namens "com.io.CacheType".

Sie könnten post der gesamte Quell-Datei oder so?Der code, den Sie gepostet scheint kopieren/einfügen aus anderen Quellcode-Dateien und ist voller Tippfehler.

Normalerweise sollte Folgendes immer den trick tun, wenn CacheType enum in einer anderen Quelldatei, Sie hatte einen Tippfehler in CacheType.HÄUFIG:

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

Arbeitet mit einem Vollständig qualifizierten Namen eingeben.

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top