【发布时间】:2017-11-13 10:09:23
【问题描述】:
这是一个困扰我一段时间的问题。
在像 Jersey 这样的框架中,我们有接口,我们可以对这些接口进行子类化以向我们的程序添加一些功能。例如,要在 REST 应用程序中添加请求过滤,我们可以实现 ContainerRequestFilter,然后我们就获得了身份验证。
我的问题是框架/库如何知道我们有其接口的子类之一?
据我了解,您不能实例化接口,只能实例化其子类,例如:
public interface Greeter{
void sayHi();
}
public class SpanishGreeter implements Greeter{
@override
void sayHi(){
System.out.println("Hola");
}
}
public class Controller{
public void main(String[] args){
//We must know the name of subclass to instantiate?
Greeter spanishG = new SpanishGreeter();
}
}
【问题讨论】:
-
是的。 by new NameOfImplementingClass();
-
如果我们必须知道名称,那么框架如何实例化它? @Stultuske
-
什么意思?
-
这是一个很好的问题,简短的回答是“这很棘手”。没有明显的方法,但你可以看看this project,看看他们是如何做到的。
-
@Stultuske 不一定。请参阅 Spring 自动装配,它会很高兴地实例化接口的任何实现(只要没有其他实现),而无需任何进一步的说明。
标签: java interface dynamic-binding