I am getting a strange runtime error from my code:
"Found interface [SomeInterface] but class was expected"
How can this happen? How can an interface get instantiated?
Update: (In response to some answers) I am compiling and running against the same set of libraries, but I am using Guice to inject a Provider for this particular Interface.
The problem went away when I bound an implementation to the interface (seems like the @ImplementedBy annotation was not enough).
I was more interested in the mechanics through which Guice managed to actually instantiate an interface.
This happens when your runtime classpath is different than your compile time classpath.
When your application was compiled, a class (named SomeInterface
in your question) existed as a class.
When your application is running at compile time, SomeInterface
exists as an interface (instead of a class.)
This causes an IncompatibleClassChangeError
to be thrown at runtime.
This is a common occurence if you had a different version of a jar file on the compile time classpath than on the runtime classpath.