В настоящее время я играю с ASM и анализирую подписи генераторов. Документально возможное содержание в данном разделе описывается here и можно резюмировать с помощью следующей грамматике:Что означает :: означает подпись класса?
TypeSignature:Z | C | B | S | I | F | J | D | FieldTypeSignature
FieldTypeSignature:ClassTypeSignature | [TypeSignature | TypeVar
ClassTypeSignature:L ID (/ Id) TypeArgs? *; *
TypeArgs (Id TypeArgs.?):< TypeArg +>
TypeArg: ** | (+ | -)? FieldTypeSignature *
ТипVar:T Id;
Однако, я обнаружил, за исключением одного случая, что это не так:
trait SomeTrait
class SomeClass[T <: SomeTrait]
Дженерики подписи для SomeClass
: <T::LSomeTrait;>Ljava/lang/Object;
Я не понимаю, почему ::
появился здесь и что это значит. Удвоенный :
недействителен с точки зрения грамматики. Что интересно, если я заменил trait
на abstract class
, то ::
будет заменен на один :
(что ожидается).
Любые идеи?
Возможный дубликат http://stackoverflow.com/questions/20001427/double-colon-operator-in-java-8 – nullpointer
@nullpointer Как которые применяются здесь? – sepp2k