Java中接口和类的区别

时间:2017-11-17 08:14:02

标签: java

根据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);

3 个答案:

答案 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文档:

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/BeanFactory.html#getBean-java.lang.Class-

重要的是javadoc声明:

  

返回唯一匹配给定对象类型的bean实例,   如果有的话。

     

NoUniqueBeanDefinitionException - 如果给定的多个bean   找到了类型

因此,如果您有更多的bean扩展接口,您将获得异常。

相关问题