2013-09-15 3 views
0

The Checkers Framework ссылки java.lang.annotation.ElementType.TYPE_USE которые были добавлены в JDK8. Когда я использую его под JDK7, я получаю следующее предупреждение:Как подавить предупреждения «unknown enum constant»?

unknown enum constant java.lang.annotation.ElementType.TYPE_USE

Это разумное предупреждение, но как я подавляю его в тех случаях, я считаю безвредны?

ответ

0

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

java.lang.ArrayStoreException: sun.reflect.annotation.EnumConstantNotPresentExceptionProxy 
    at sun.reflect.annotation.AnnotationParser.parseEnumArray(AnnotationParser.java:693) ~[na:1.7.0_40] 
    at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:482) ~[na:1.7.0_40] 
    at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:306) ~[na:1.7.0_40] 
    at sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:241) ~[na:1.7.0_40] 
    at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:88) ~[na:1.7.0_40] 
    at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:70) ~[na:1.7.0_40] 
    at java.lang.Class.initAnnotationsIfNecessary(Class.java:3168) ~[na:1.7.0_40] 
    at java.lang.Class.getAnnotation(Class.java:3127) ~[na:1.7.0_40] 
    at sun.reflect.annotation.AnnotationType.<init>(AnnotationType.java:131) ~[na:1.7.0_40] 
    at sun.reflect.annotation.AnnotationType.getInstance(AnnotationType.java:84) ~[na:1.7.0_40] 
    at sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:221) ~[na:1.7.0_40] 
    at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:88) ~[na:1.7.0_40] 
    at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:70) ~[na:1.7.0_40] 
    at java.lang.reflect.Method.declaredAnnotations(Method.java:714) ~[na:1.7.0_40] 
    at java.lang.reflect.Method.getAnnotation(Method.java:700) ~[na:1.7.0_40] 
    at com.google.inject.spi.InjectionPoint.getAtInject(InjectionPoint.java:466) ~[guice-3.0-no_aop.jar:na] 
    at com.google.inject.spi.InjectionPoint.getInjectionPoints(InjectionPoint.java:664) ~[guice-3.0-no_aop.jar:na] 
    at com.google.inject.spi.InjectionPoint.forInstanceMethodsAndFields(InjectionPoint.java:356) ~[guice-3.0-no_aop.jar:na] 
    at com.google.inject.internal.MembersInjectorStore.createWithListeners(MembersInjectorStore.java:90) ~[guice-3.0-no_aop.jar:na] 
    at com.google.inject.internal.MembersInjectorStore.access$000(MembersInjectorStore.java:34) ~[guice-3.0-no_aop.jar:na] 
    at com.google.inject.internal.MembersInjectorStore$1.create(MembersInjectorStore.java:42) ~[guice-3.0-no_aop.jar:na] 
    at com.google.inject.internal.MembersInjectorStore$1.create(MembersInjectorStore.java:39) ~[guice-3.0-no_aop.jar:na] 
    at com.google.inject.internal.FailableCache$1.apply(FailableCache.java:39) ~[guice-3.0-no_aop.jar:na] 
    at com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:549) ~[guice-3.0-no_aop.jar:na] 
    ... 102 common frames omitted 

Значение, любой код, который использует java.lang.reflect.Method.getAnnotation() потерпит неудачу во время выполнения.

В моем случае, этот вопрос был вызван https://code.google.com/p/checker-framework/issues/detail?id=255

1

Если вы получаете это ошибка времени компиляции:

unknown enum constant java.lang.annotation.ElementType.TYPE_USE 

тогда вы компилируете с помощью Java 7 JDK, но ваш код ссылается на перечисление константа, которая определена только в Java 8 JDK. Проблема может заключаться в том, что ваш код использует библиотеку, которая ссылается на константу enum. В частности, аннотации типа, поставляемые с ссылкой Checker Framework ElementType.TYPE_USE. Вы можете использовать Checker Framework, но все же компилируете и запускаете свой код в JVM Java 7, следуя инструкциям в разделе «Class-file compatibility with Java 7» руководства Checker Framework.

Смежные вопросы