2017-11-17 1 views
1

Java 인터페이스와 클래스의 기사는 완전히 다릅니다. 내가 인터페이스를 써 보자.Java에서 인터페이스와 클래스의 차이점

package com.main.service; 

public interface SomeService{ 
    public void someMethod(); 
} 

하지만 Java에서 왜 아래 코드가 허용됩니까?

com.main.service.SomeService.class; 

나는 아래와 같이 Spring 애플리케이션 컨텍스트에서 콩을 얻기 위해이 코드를 사용하고 있습니다 : -

SomeService someservice = applicationContext 
      .getBean(com.main.service.SomeService.class); 
+1

인터페이스와 클래스 모두 Java 바이트 코드 클래스로 컴파일됩니다. Dependency Injection Containers를 사용하면 인터페이스를 전달할 수 있으며 제공 할 구현을 찾습니다. –

+1

applicationContext .getBean은 인터페이스 구현을 반환합니다. – awsome

+1

**. ** 클래스는 public static final 필드처럼 보이는 내장 언어 기능 (클래스 리터럴)입니다. – aKilleR

답변

2

(이 경우 com.main.service.SomeService.class;)를 .class 유형의 끝에 구문 클래스가 문자 참조를, an object of type Class입니다. 이것을 Java 유형에서 사용할 수 있습니다. 구체적인 클래스, 추상 클래스 또는 인터페이스 일 수 있습니다. 위의 링크에서 자바 독으로 당

: Class 클래스의

인스턴스가 실행중인 Java 응용 프로그램

의 클래스 및 인터페이스을 나타내는 새로운라면이 혼동 될 수 있습니다 클래스와 인터페이스를 구별하는 데 익숙하지만, 단순히 기본 시스템이 작동하는 방식입니다 (모든 클래스와 인터페이스는 바이트 코드 class 파일로 컴파일됩니다.)

의존성 주입 (또는 뭔가의 "유형"을 전달해야하는 다른 용도)에서 사용되는 구문을 일반적으로 볼 수 있습니다. 가장 쉬운 방법입니다.

+2

감사합니다. 나는 그것을 줄 것이고 내 질문을 게시 할 것이다. 고맙습니다. –

0
당신은 당신이 사용되는 방법의 자바 문서를 보라

:

중요한

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

javadoc에 상태 :

돌아 고유 지정된 객체 유형과 일치하는 빈 인스턴스를 , 있다면 .

NoUniqueBeanDefinitionException - 지정된 유형의 하나 이상의 빈이

발견 된 경우 인터페이스를 확장 둘 이상의 콩 그래서 만약 당신이 예외를 얻을 것이다.

+0

불쾌하지 않습니다. 나는 봄에 관해서 아무것도 묻지 않고있다. 인터페이스에 대해 묻습니다. –

+2

그러면 berry120이 질문에 대한 좋은 대답을했다고 생각합니다. – awsome

2

클래스 리터럴은 클래스, 인터페이스, 배열 또는 프리미티브 유형의 이름 또는 pseudo-type void와 '.'이 뒤 따르는 표현식입니다. 및 토큰 클래스

ClassLiteral: 
TypeName {[ ]} . class 
NumericType {[ ]} . class 
boolean {[ ]} . class 
void . class 

C는 클래스, 인터페이스, 또는 어레이 형의 이름 C.class의 종류가 분류된다.

클래스 리터럴은 현재 인스턴스의 클래스 정의 클래스 로더에 정의 된대로 명명 된 형식 (또는 void)에 대해 Class 개체를 평가합니다.

관련 문제