2009-11-12 2 views
2

우리는 주어진 REST 인터페이스가 있습니다Java 인터페이스 정적 메서드 해결 방법?

POST /calculation 
<data>abc</data> 

이 계산은 서버 설정에 따라 다른 논리 "계산기"에 의해 구현 될 수 있습니다.

우리는 이제 각 계산기가 구현해야하는 Java 인터페이스를 설계하고 있습니다. 인터페이스에는 각 REST 서비스에 대한 메소드가 있습니다.

모든 REST (및 HTTP) 호출에 상태 비 저장이 주어지면 각 메소드는 정적이어야합니다. 그러나 Java 인터페이스에서 정적 메소드를 정의 할 수는 없습니다. 이 상황에 대한 좋은 해결 방법이 있습니까?

메소드를 정적이 아닌 것으로 정의한 다음 계산기 클래스의 인스턴스를 먼저 만들 수 있습니다. 인터페이스에서 static 키워드를 사용하여 메서드가 stateless임을 나타내는 것이 더 깨끗해 보입니다.

답변

1

정상적으로 선언 된 메소드와 구현 클래스를 가진 인터페이스를 원한다고 생각하고이 단일 인스턴스를 인스턴스화하기 만하면됩니다. 메서드 자체가 정적 인 이유는 그 자체는입니다.

1

이 정적이어야한다고 생각하십니까? 그들은 분명히있을 수 있지만 나중에 다른 구현을 연결하는면에서 한계가 있습니다. 메모리 소비 등이 염려되는 경우 싱글턴을 사용하면 정적 질문과 동일하게 처리 할 수 ​​있습니다. 질문에 대한 마지막 단락에서 이미 말했던 것처럼.

7

무국적은 정적 인 것을 의미하지 않습니다. 무국적이라는 것은 구성 요소가 상태에 의존하지 않는다는 것을 의미합니다. 구성 요소를 말하면, 인터페이스의 전체 구현은 실제로 상태 비 저장이므로 멤버 변수가 없습니다. 구현 클래스의 여러 인스턴스가 완벽하게 OK입니다. 특히 관리 할 컨텍스트가있는 경우 (예 : Spring 또는 EJB).

0

이 인터페이스를 구현하는 클래스가 구현을 변경할 필요가없는 경우 인터페이스에 helper 메서드로 static method을 사용하십시오.

java 8 버전의 해결 방법은 필요하지 않습니다.

Java 8은 인터페이스에서 정적 메소드를 지원합니다. 이 설명서 page을보십시오.

정적 방법 :

방법을 기본값으로 또한,이 인터페이스에 정적 메서드를 정의 할 수 있습니다. 정적 메서드는 모든 개체가 아닌 정의 된 클래스와 연결된 메서드로 클래스의 모든 인스턴스는 정적 메서드를 공유합니다.

이렇게하면 도우미를 쉽게 구성 할 수 있습니다 라이브러리의 메소드; 동일한 interface보다는 허용 대답에 제안 문제에 대한 separate class

다른 솔루션 Singleton을 사용에 interfacestatic methods 특정을 유지할 수 있습니다.