Java使用什么技巧来避免>>中的空格?
在Java Generic Book中,在对比C++模板和Java Generic之间的区别时说:
在C++中,会出现一个问题,因为没有空格的>>表示右移运算符。Java通过语法中的技巧解决了这个问题。
这是什么伎俩?
在Java Generic Book中,在对比C++模板和Java Generic之间的区别时说:
在C++中,会出现一个问题,因为没有空格的>>表示右移运算符。Java通过语法中的技巧解决了这个问题。
这是什么伎俩?
OpenJDK javac 解析器 , 在解析类型参数时,会将词法分析器标记 ()、 、 ( ) 并放入带有少一个 '' 字符的标记中。JavacParser
GTGTGTEQ
>>>=
GTGTEQ
GTEQ
GTGTGT
>>>
GTGT
>
这是魔术的片段:JavacParser#typeArguments()
switch (S.token()) {
case GTGTGTEQ:
S.token(GTGTEQ);
break;
case GTGTEQ:
S.token(GTEQ);
break;
case GTEQ:
S.token(EQ);
break;
case GTGTGT:
S.token(GTGT);
break;
case GTGT:
S.token(GT);
break;
default:
accept(GT);
break;
}
人们可以清楚地看到,这确实是一个技巧,它在语法:)
这实际上在下一个版本C++中得到了修复。真的没有太多的技巧;如果在解析泛型或模板的过程中遇到>>,而您希望>,那么您已经有足够的信息来生成错误消息。而且,如果您有足够的信息来生成错误消息,则也有足够的信息将>>解释为两个单独的标记:>后跟>。