INVALID_TOKEN_ERROR
正则表达式是错误的,并且mantainers没有机会很快解决它。
除了分叉库之外,有没有办法可以在我自己的代码中安全地重新定义它?
对于不想打开链接的人,可以使用受控制的代码:
public class BearerToken {
[...]
static final Pattern INVALID_TOKEN_ERROR = Pattern.compile("\\s*error\\s*=\\s*invalid_token");
答案 0 :(得分:0)
不,我不这么认为。反射不会在这里拯救你(见http://docs.oracle.com/javase/tutorial/reflect/member/fieldTrouble.html),最后一个字段无法更改。例如,如果该字段是一个字符串,则该值将在编译的代码中内联,因此更改它可能会造成灾难...... 所以你的选择是给维护者施加压力或分叉代码。
答案 1 :(得分:0)
虽然您无法替换Pattern
对象,因为它是最终的,您可以使用反射操作对象INVALID_TOKEN_ERROR
的成员字段。
更新私人字段String pattern
,然后在compile()
上调用私有方法INVALID_TOKEN_ERROR
如何更新私有变量:Changing private final fields via reflection
如何调用私有方法:How to call a private method from outside a java class
答案 2 :(得分:0)
创建您自己的com.google.api.client.auth.oauth2.BearerToken
类,并确保它所在的JAR / WAR /文件夹位于原始库之前的ClassPath 中。因此,你可以放下它。我相信即使是原始的图书馆也可能会使用它。 (请检查出来。)
注意:您可以在同一个包中创建一个类,但在另一个物理文件夹/目录中创建一个类。因此你可以例如在别人的包中访问包私有(默认访问)字段。当JVM在运行时搜索要加载的类时,它会按给定的顺序搜索类路径。使用该类的第一次出现。