서로 다른 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
유형 매개 변수를 사용하는 것보다 더 나은 방법이 있어야합니다. 어떤 아이디어?
감사합니다.
(클래스 유형이 지정되지),'Object' *는 "알 수없는 유형" – Bohemian
* 의미 음, 그래, 내 질문은 추측 이것이 좋은 연습인지 아닌지 궁금해하는 것이 더 중요합니까? generics는 실제로 파생 된 클래스가 입력되는 이유를 알지 못하기 때문에이 경우에는 (적어도 나에게) 의미가 없습니다. 이 작업을 수행하는 "더 나은 방법"이 있습니까? 또는 'Object'를 사용할 수 있습니까? – PseudoPsyche