根据Java Interface和Class中的多篇文章完全不同。我来写一个界面。
package com.main.service;
public interface SomeService{
public void someMethod();
}
但是为什么Java中允许使用以下代码?
com.main.service.SomeService.class;
我正在使用此代码从Spring应用程序上下文中获取bean,如下所示: -
SomeService someservice = applicationContext
.getBean(com.main.service.SomeService.class);
答案 0 :(得分:2)
类型末尾的.class
语法(在本例中为com.main.service.SomeService.class;
)引用类文字,即an object of type Class
。您可以在任何 Java类型上使用它,无论是具体类,抽象类还是接口。
根据上面链接中的Javadoc:
类Class的实例表示正在运行的Java应用程序中的类和接口
如果你是新手,这可能会让人感到困惑,并习惯于将类和界面区分开来,而只是说它是底层系统如何工作的(所有类和接口都是编译的)字节码class
文件。)
您通常会看到依赖注入中使用的语法(或其他需要传递"类型"的东西),因为它是最简单的方法。
答案 1 :(得分:2)
类文字是一个表达式,由类,接口,数组或基本类型的名称或伪类型void组成,后跟'。和标记类。
ClassLiteral:
TypeName {[ ]} . class
NumericType {[ ]} . class
boolean {[ ]} . class
void . class
C.class的类型,其中C是类,接口或的名称 数组类型,是Class。
类文字计算指定类型(或void)的Class对象,由当前实例的类的定义类加载器定义。
答案 2 :(得分:0)
您应该查看您正在使用的方法的Java文档:
重要的是javadoc声明:
返回唯一匹配给定对象类型的bean实例, 如果有的话。
NoUniqueBeanDefinitionException - 如果给定的多个bean 找到了类型
因此,如果您有更多的bean扩展接口,您将获得异常。