2012-07-17 63 views
1

我创建了几个不同的类,每个类都与不同的API进行交互。我为每个类继承了一个接口,但接口中的一个方法可以采用几种不同的数据类型,具体取决于实现哪个API。是否可以为该方法定义一个未知类型?如何在接口中声明方法签名以接受未知的类型变量?

现在我只是宣布它作为一个Object和实施中铸造它。

接口:

public interface UDSession { 

    public void authenticate(String user) throws UDException; 

    public void linkAccount(Object authInfo) throws UDException; 

} 

方法实现(只是签名和第一线):

的Dropbox:

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 2012-07-17 05:38:08

+0

嗯,是的,我想我的问题是更多的是想知道这是否是好的做法?在这种情况下,泛型没有意义(至少对我来说)是没有意义的,因为我没有看到派生类被键入的原因。有没有这样做的“更好的做法”,或者使用“Object”可以接受? – PseudoPsyche 2012-07-17 22:24:37

回答

3

取决于你如何实例化你的类,你可以尝试:

public interface UDSession<T> { 

    public void authenticate(String user) throws UDException; 

    public void linkAccount(T authInfo) throws UDException; 

} 
+0

该类本身是无类型的:'公共类DropboxSession扩展WebAuthSession实现UDSession' – PseudoPsyche 2012-07-17 05:32:34

+1

你可以添加一个泛型参数到DropboxSession? – Puce 2012-07-17 05:43:25

+0

将泛型应用于正在实现此接口的类。公共类DropboxSession 扩展WebAuthSession实现UDSession – Vinay 2012-07-17 05:48:55

相关问题