Splitter在简单模式上爆炸

我刚刚开始使用Guava代替Google-Collections。 斯普利特课看起来很酷。 但是当我使用它时,像这样:

private static final Pattern p = Pattern.compile(" +"); private static final Splitter usSplitter = Splitter.on(p).trimResults(); 

我得到一个堆栈转储:

 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.(CharMatcher.java:69) at com.google.common.base.Splitter.(Splitter.java:99) at com.google.common.base.Splitter.on(Splitter.java:208) 

javadocs对此“com.google.common.base.Platform”一无所知。 所以有点难以猜出出了什么问题。

如你所见,模式很简单。

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

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

java.lang.NoSuchMethodError告诉您在编译时类路径中当前运行时类路径中缺少所需的方法。

换句话说,要解决此问题,您需要将运行时类路径与您在编译期间使用的API的正确版本对齐。 它也可能是由于在整个运行时类路径中混合了不同版本的库引起的。 然后清理类路径。

其实。 你有两个版本的com.google.common.base.Platform类,其中一个类有或没有方法。

尝试删除其中一个jar文件。 我建议删除google-collections.jar并离开gauva.jar

它会工作正常。