Java 错误:找到接口...但上课是意料之中的

2022-09-01 01:22:53

我从代码中收到一个奇怪的运行时错误:

"Found interface [SomeInterface] but class was expected"

怎么会这样?如何实例化接口?

更新:(为了回应一些答案)我正在编译并针对同一组库运行,但是我正在使用Guice为此特定接口注入提供程序。

当我将实现绑定到接口时,问题就消失了(似乎@ImplementedBy注释是不够的)。

我对Guice设法实际实例化界面的机制更感兴趣。


答案 1

当运行时类路径与编译时类路径不同时,会发生这种情况。

编译应用程序时,一个类(在问题中命名)作为一个类存在。SomeInterface

当应用程序在编译时运行时,作为接口(而不是类)存在。SomeInterface

这会导致 在运行时引发 。IncompatibleClassChangeError

如果在编译时类路径上具有不同版本的 jar 文件,则这种情况很常见, 而不是在运行时类路径上。


答案 2

最有可能的是,代码是针对库中的类编译的,然后该类被更改为您运行所针对的版本中的接口。


推荐