2009-09-15 14 views
12
[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; 

Naprawdę nie dostaję tego. Mam projekt, w którym niestandardowo buduję przechwytywacz buforujący na wiosnę. Jest to po prostu wygląd nazwy pamięci podręcznej, aby wskazywał na EhCache i używa aop-autoproxy do załadowania CacheableAspect (która jest moją interpreterem buforowania). Teraz, gdy używam wartości domyślnej w adnotacji, ANT daje mi poniżej błąd kompilatora. Próbowałem aktualizacji do najnowszej wersji JDK (mam teraz 1.6 16) i ustawienie poziomów źródła/celu w skrypcie ant, ale bez powodzenia. Kiedy usuwam wartość domyślną i wymuszam na wszystkich obszarach, aby określić wartość, kompiluje się ona w mrówce.znaleziono niezgodne typy: wymagane: domyślne wyliczenia w adnotacjach

Zawsze działał w Eclipse, miałem testy jednostkowe, które działały idealnie z poprzednią wartością domyślną.

Co daje? Próbowałem zbudować projekt (bez sprężyny), który po prostu powtórzył konfigurację za pomocą mrówki i skompilował ją w ant fine (i w eclipse).

który mówi mi, że może to być wiosenny automatyczny serwer proxy? ale dlaczego kompilator nie dałby mi nazwy wygenerowanego typu? GRRRR. jakieś pomysły?

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

Odpowiedz

18

nadal obecne w JDK 6u25, ale dodanie pakietu na wartość domyślną załatwia sprawę:

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

to zaoszczędziło mi trochę czasu, dziękuję! – Art

+0

w JDK 1.6.0_31 lub 1.7.0_03 ten błąd został naprawiony (zobacz odpowiedź poniżej) – rurouni

+1

Przepełnienie stosu, kocham cię. Ty też @yurez. – snappieT

0

Zastanawiam się, czy jest to spowodowane przez zdefiniowanie Cacheable i CacheType w tym samym pliku źródłowego, a następnie importowanie „com.io.CacheType”. To może spowodować, że kompilator uzna, że ​​istnieją dwie klasy o nazwie "com.io.CacheType".

0

Czy możesz opublikować cały plik źródłowy? Wysłany przez Ciebie kod jest kopiowany/wklejany z różnych plików źródłowych i jest pełen literówek.

Zwykle następuje zawsze powinno wystarczyć, gdy CacheType enum jest w innym pliku źródłowego, trzeba było literówkę w CacheType.COMMON:

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

To było w innym pliku źródłowym i masz rację, wygląda na to, że mam literówkę. Opublikuję go, gdy wrócę do domu, odkąd jestem w pracy. – Core

1

rzucić okiem tutaj: http://bugs.sun.com/view_bug.do?bug_id=6512707 To może być przyczyną twojego problemu.

+0

Najnowszy Sun JDK (6u20) wciąż ma ten błąd. Kompilowanie z OpenJDK lub JDT (częścią Eclipse) rozwiązało problem dla mnie. JDT może być używany poza detalem zaćmienia (np. W mrówce) tutaj: http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.jdt.doc.isv/guide/jdt_api_compile.htm. Aby korzystać z wtykowych procesorów adnotacyjnych, będziesz potrzebować plików org.eclipse.jdt.apt.pluggable.core .jar i org.eclipse.jdt.compiler.apt .jar w swojej ścieżce klas, które można znaleźć w folderze wtyczek zaćmienia instalacja. –

1

Po prostu mała aktualizacja. Podczas gdy moduł do śledzenia błędów pokazuje błąd jako zamknięty i wydaje się, że chce obalić wszelkie nowe otwarcia błędu. Kiedy napotkałem ten błąd w tym przykładzie, obraca się wokół procesora adnotacji czasu kompilacji. Ponieważ retencja to RUNTIME, co oznacza, że ​​nie wymaga procesora adnotacji czasu kompilacji, wydaje się, że procesor adnotacji czasu kompilacji wysadza proces kompilacji. Ilekroć jestem w NetBeans i mam adnotacje czasu kompilacji włączone w Kompilacji-> Kompilowanie we właściwościach projektów, otrzymuję mgławicową serię błędów.

Mam zamiar spróbować otworzyć nowy bilet błędu dla problemu i po prostu myślałem, że przejdę na łatwe obejście na teraz.

+0

Otworzyłem nowy bardziej aktualny błąd. Miejmy nadzieję, że nie zamkną go automatycznie jako duplikatu. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7037412 – PaulSCoder

1

nadal obecny przy użyciu javac 1.6.0_26. Sposób obejścia problemu przez Yurez przy użyciu w pełni kwalifikowanej nazwy typu podczas określania wartości domyślnej nadal działa.

0

Działa z pełną nazwą typu.

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

uznał ten problem został rozwiązany w 1.6.0_31 i 1.7.0_03 (być może również w niektórych poprzednich wersjach), więc po prostu uaktualnić kompilator Javy.

+0

Czy to był błąd tylko kompilatora, czy też JRE? Chodzi o to, jeśli skompiluję ją w wersji 1.6.0u31, czy będzie działać w starszej wersji JRE 1.6. – Gaim

+0

@Gaim to błąd kompilatora, a nie błąd JRE, więc zgadnij. –

Powiązane problemy