Java Illegal modyfikatory klasy Kod wyjątku 0x209

Mam problem z podstawową wersją kodu. Chcę zacząć kompilować go w formacie klasy 1.6, ale jest jeden problem, który ujawnia się tylko wtedy, gdy próbuję uruchomić skompilowany kod. Mam następujący wyjątek:

java.lang.ClassFormatError: Niedozwolone modyfikatory klasy w klasie FooBar 0x209

Googling nie ujawnia wielu szczegółów. Wedługto problem może być związany z niezgodnością między interfejsami a modyfikatorami implementacji. I oczywiście musi to być jakieś nowe ograniczenie, które nie było w wersji 1.5.

Problem jest ogromny i ma wiele klas wewnętrznych i wewnętrznych klas wewnętrznych, więc problem jest trudny do wyśledzenia (to jedna z klas wewnętrznych, których jestem pewien). Nie trzeba dodawać, że klasa nie ma żadnych testów, które tak zmieniają ją, wymaga szczególnej ostrożności i jest pracochłonna.

Czy ktoś ma jakieś dokładne informacje o 0x209 - co konkretnie oznacza kod?

EDYTOWAĆ:

Dzięki Arne, który wpadł na właściwy kierunek, byliśmy w stanie wyśledzić problem i rozwiązać problem. Przyczyna źródłowa nie jest do końca jasna, ale teraz możemy tego uniknąć.

Używamy starożytnego Douga Leipakiet util.concurrent w niektórych obszarach, ponieważ niektóre komponenty działają w środowiskach, które dostarczają tylko Java 1.1 (tak, całkiem dobrze jest się śmiać, nie mam nic przeciwko).

Ten sam kod (przy użyciu narzędzi współbieżnych) jest również używany jako mały składnik innego powiązanego oprogramowania. Ponieważ kod Douga wykorzystywał niektóre funkcje 1.2, byliśmy również zmuszeni do modyfikowania niektórych części util.concurrent, aby był zgodny z 1.1 pakietem backported kolekcji Sun (nie można znaleźć linku do tych już). W jakiś sposób spowodowało to szczególne zachowanie kompilacji Eclipse, które występuje, gdy zmieniamy format klasy na Java 1.6. Jest to minimalny kod powodujący problem:

EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMap;
import com.sun.java.util.collections.Map;

public class FooBar
{
    public static void main(String[] args) {
        Map.Entry e = (Map.Entry)(new ConcurrentHashMap().entrySet().iterator().next());
    }
}

Po skompilowaniu tego z Eclipse (z kompilacją ustawioną na 1,6, 1.5 działa poprawnie) i spróbuj załadować klasę z 1.6 JRE firmy Sun, w której występuje problem. Obejście problemu: zamiast zapętlać wpisy, przechodzimy przez klucze i uzyskujemy wartości w pętlach za pomocą klawiszy.

Nasza konfiguracja jest tutaj tak egzotyczna, że ​​nic dziwnego, że nikt nie wpadł na to. W końcu sprawdziłem nasze skrypty kompilacji i zobaczymy, skrypt ant ma ustawienia 1.6 i ustawienia docelowe. Najwyraźniej jest to specyficzne dla Eclipse.

EDIT2:

Przyjrzałem się bliżej raportowi o błędzie Sun, który tutaj umieściłem. Problem dotyczy także com.sun.java.util.collections.Map.Entry. I to miało miejsce w Javac Javie. Ciekawy.

questionAnswers(1)

yourAnswerToTheQuestion