Splitter在简单模式上爆炸

fis*_*rds 8 java guava

我刚刚开始使用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的正确版本对齐.它也可能是由于在整个运行时类路径中混合了不同版本的库引起的.然后清理类路径.

  • 当然,最早版本的番石榴 - *.jar被称为google-collect - *.jar,这个问题的检测有点复杂. (5认同)

Col*_*inD 8

您使用的是什么版本的番石榴?对于r05,这对我来说非常好.

编辑:这里的具体问题似乎是您在运行时类路径中同时拥有google-collections和guava.Platform(内部类)存在于谷歌收藏中但没有这种precomputedCharMatcher方法.Splitter是从番石榴罐正确Platform加载,但从谷歌收集罐加载.

  • 我甚至从来没有听说过"番石榴-r05-SNAPSHOT". (2认同)