我从我的代码中得到一个奇怪的运行时错误:
"Found interface [SomeInterface] but class was expected"
怎么会发生这种情况?如何实例化接口?
更新:(针对一些答案)我编译,并用同样的程序库的运行,但我正在用吉斯注入这个特定接口的提供者.
当我将一个实现绑定到接口时,问题就消失了(似乎@ImplementedBy注释还不够).
我对Guice设法实际实例化接口的机制更感兴趣.
当运行时类路径与编译时类路径不同时,会发生这种情况.
编译应用程序时,类(SomeInterface
在您的问题中命名)作为类存在.
当您的应用程序在编译时运行时,SomeInterface
作为接口(而不是类)存在.
这会导致IncompatibleClassChangeError
在运行时抛出.
如果编译时类路径上的jar文件版本与运行时类路径上的版本不同,则这是常见的情况.
很可能代码是针对库中的类编译的,然后将其更改为您运行的版本中的接口.