Java 有人能解释一下,这段代码是如何创建一个实现接口的类,并实例化该类的吗?
接口Java 有人能解释一下,这段代码是如何创建一个实现接口的类,并实例化该类的吗?,java,spring,Java,Spring,接口 public interface MessageService { String getMessage(); } 这个班(我有疑问) 有谁能解释一下,标记在------之间的代码在类定义中没有给出任何implements关键字的情况下是如何工作的,它还可以在该行中创建该类的对象吗 您可以参考Spring快速入门指南的此链接 来自: 如果类实例创建表达式以类主体结束,则被实例化的类是匿名类。然后: 设T为ClassOrInterfaceTypeToInstate表示的类型。如果T
public interface MessageService {
String getMessage();
}
这个班(我有疑问)
有谁能解释一下,标记在------之间的代码在类定义中没有给出任何implements关键字的情况下是如何工作的,它还可以在该行中创建该类的对象吗
您可以参考Spring快速入门指南的此链接
来自:
如果类实例创建表达式以类主体结束,则被实例化的类是匿名类。然后:
设T为ClassOrInterfaceTypeToInstate表示的类型。如果Tdenotes是一个类,则声明T的一个匿名直接子类。如果Tdenotes是一个接口,则声明实现T的对象的匿名直接子类
这与Spring无关,而是与Java本身有关 您使用的是匿名类,它允许您同时声明和实例化一个类。在这里,您将声明一个匿名类,该类实现了
MessageService
并重写其getMessage()
方法,同时实例化匿名类
请记住,匿名类与本地类具有类似的作用域和限制。主要区别在于匿名类不能被赋予类名,因此不能定义它们的构造函数。注意:匿名类可以实现单个接口(在这种情况下,语法是newinterfacename(){…}
),也可以扩展单个具体或抽象类(在这种情况下,语法是newclassname([参数列表]){…}
)
@Configuration
@ComponentScan
public class Application {
//---------
@Bean
MessageService mockMessageService(){
return new MessageService(){
public String getMessage(){
return "Hello World! Yash";
}
};
}
//---------
public static void main(String[] args){
ApplicationContext context = new AnnotationConfigApplicationContext(Application.class);
MessagePrinter printer = context.getBean(MessagePrinter.class);
System.out.println(printer.service.getClass().getName());
printer.printMessage();
}
}