2012-07-17 2 views
1

서로 다른 API와 상호 작용할 수 있도록 여러 클래스를 만들고 있습니다. 상속받을 각 클래스의 인터페이스를 만들었지 만 인터페이스의 메소드 중 하나는 구현되는 API에 따라 여러 가지 데이터 유형을 사용할 수 있습니다. 해당 메소드에 알 수없는 유형을 정의 할 수 있습니까?알 수없는 형식 변수를 받아들이도록 인터페이스에서 메서드 서명을 선언하는 방법?

지금은 그냥 Object으로 선언하고 구현 내에서 캐스팅합니다.

인터페이스 :

public interface UDSession { 

    public void authenticate(String user) throws UDException; 

    public void linkAccount(Object authInfo) throws UDException; 

} 

방법 구현 (단지 서명과 첫 번째 줄) :

보관 :

public void linkAccount(Object authInfo) throws UDException { 
     WebAuthSession.WebAuthInfo info = (WebAuthSession.WebAuthInfo) authInfo; 
} 

구글 :

public void linkAccount(Object authInfo) throws UDException { 
       GoogleOAuthParameters info = (GoogleOAuthParameters) authInfo; 
     } 

나는 또한 시도 definin 인터페이스에서이를 Class<?>으로 변경하고 메소드 서명 구현에서이를 Class<WebAuthSession.WebAuthInfo>으로 정의하십시오. 그러나 이것은 효과가 없었습니다.

Object 유형 매개 변수를 사용하는 것보다 더 나은 방법이 있어야합니다. 어떤 아이디어?

감사합니다.

+0

(클래스 유형이 지정되지),'Object' *는 "알 수없는 유형" – Bohemian

+0

* 의미 음, 그래, 내 질문은 추측 이것이 좋은 연습인지 아닌지 궁금해하는 것이 더 중요합니까? generics는 실제로 파생 된 클래스가 입력되는 이유를 알지 못하기 때문에이 경우에는 (적어도 나에게) 의미가 없습니다. 이 작업을 수행하는 "더 나은 방법"이 있습니까? 또는 'Object'를 사용할 수 있습니까? – PseudoPsyche

답변

3

당신이 당신의 클래스를 인스턴스화하는 방법에 따라 당신이 시도 할 수 : 제네릭없이

public interface UDSession<T> { 

    public void authenticate(String user) throws UDException; 

    public void linkAccount(T authInfo) throws UDException; 

} 
+0

클래스 자체는 타입이 없습니다 :'public class DropboxSession extends WebAuthSession extends UDSession' – PseudoPsyche

+1

DropboxSession에 제네릭 매개 변수를 추가 할 수 있습니까? – Puce

+0

은이 인터페이스를 구현하는 클래스에 제네릭을 적용합니다. 공용 클래스 DropboxSession WebAuthSession은 UDSession을 구현합니다. – Vinay

관련 문제