我刚刚开始使用Guava代替Google-Collections.Splitter类看起来很酷.但是当我使用它时,像这样:
private static final Pattern p = Pattern.compile(" +");
private static final Splitter usSplitter = Splitter.on(p).trimResults();
Run Code Online (Sandbox Code Playgroud)
我得到一个堆栈转储:
java.lang.NoSuchMethodError: com.google.common.base.Platform.precomputeCharMatcher(Lcom/google/common/base/CharMatcher;)Lcom/google/common/base/CharMatcher;
at com.google.common.base.CharMatcher.precomputed(CharMatcher.java:662)
at com.google.common.base.CharMatcher.<clinit>(CharMatcher.java:69)
at com.google.common.base.Splitter.<init>(Splitter.java:99)
at com.google.common.base.Splitter.on(Splitter.java:208)
Run Code Online (Sandbox Code Playgroud)
javadocs对此"com.google.common.base.Platform"一无所知.所以有点难以猜出出了什么问题.
正如你所看到的,模式很简单.
Bal*_*usC 13
它java.lang.NoSuchMethodError告诉您当前运行时类路径中缺少所需的方法,而它在编译时类路径中存在.
换句话说,要解决此问题,您需要将运行时类路径与您在编译期间使用的API的正确版本对齐.它也可能是由于在整个运行时类路径中混合了不同版本的库引起的.然后清理类路径.
您使用的是什么版本的番石榴?对于r05,这对我来说非常好.
编辑:这里的具体问题似乎是您在运行时类路径中同时拥有google-collections和guava.Platform(内部类)存在于谷歌收藏中但没有这种precomputedCharMatcher方法.Splitter是从番石榴罐正确Platform加载,但从谷歌收集罐加载.