2016-05-29 3 views
1

ASM documentation (pdf) говорит, что класс Frame имеет общий тип, предоставляющий пример использования: Frame<BasicValue>. (на стр. 119, если необходимо)Класс рамки ASM не имеет общего типа

При взгляде на source мы можем видеть его декларацию как Frame<V extends Value>.

Но по какой-то причине, когда в моем проекте я указываю Maven зависимостей

<dependency> 
    <groupId>org.ow2.asm</groupId> 
    <artifactId>asm</artifactId> 
    <version>4.2</version> 
</dependency> 
<dependency> 
    <groupId>org.ow2.asm</groupId> 
    <artifactId>asm-analysis</artifactId> 
    <version>4.2</version> 
</dependency> 

или просто нагрузки в соответствии артефактов вручную из хранилища, попытка использовать Frame<...> заканчивается ошибкой:

Type org.objectweb.asm.tree.analysis.Frame doesn't have type parameters 

И Intellij IDEA декомпилятор говорит, что Frame действительно не имеет ни одного.

Эта же проблема имеет место с Analyzer и Interpreter классами.

Как я могу победить?

+0

Вы не можете загрузить банку и сохранить Generics. Они оптимизируют свои загрузки. Вам нужно будет получить исходный код и скомпилировать его самостоятельно. –

ответ

2

Дополняя ответ на @dejvuth:

asm-debug-all случается быть версии Java 5.0 и содержит все общие типы. Более того, он двоичный, совместимый с обычной библиотекой asm без каких-либо дженериков.

2

От ASM FAQ

14. What is the earliest JDK required to use ASM?

...

The asm.util and asm.tree packages require JDK 1.2, ...

и History АНМ 4.0 RC1

generified the API to use generics and varargs. However, almost all jars are still small and 1.2 compatible.

В основном, когда коробило, ASM оптимизирует байт-код, который (среди других) делает его обратную совместимость с 1.2 путем изменения его основная версия до 46 (см. org.objectweb.asm.optimizer.ClassOptimizer).

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