2013-04-15 70 views
1

我想在方法調用中提供一個接口。取決於給定的接口,該方法應該創建一個實例。爲此我使用泛型爲該方法提供不同類型的接口。這裏的一個例子:接口作爲方法參數

static <T> T createClient(T, String endpointAddress) { 
    JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean() 
    factory.setServiceClass(T.class) 
    factory.setAddress(endpointAddress) 
    (T) factory.create() // error -> java.lang.IllegalArgumentException: java.lang.Class is not an interface 
} 

// AccessibleClient is an interface. call method 
createClient(AccessibleClient, "http://localhost/service") 

我不知道我的方法是適當的解決方案。

+1

不該「它是'createClient(T參數,字符串endpointAddress)'? – sanbhat

+0

您如何期望從界面創建實例? – Apurv

+2

它應該是'createClient(AccessibleClient.class,「http:// localhost/service」)' – gontard

回答

1

你不能說T.class - 在Java中,信息在運行時不可用。

gontardcomment,你可能想是這樣的:(?此外,在Java中,你需要分號和return關鍵字 - 這是Groovy的或某事)

static <T> T createClient (Class<T> t, String endpointAddress) 
{ 
    JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 
    factory.setServiceClass(t); 
    factory.setAddress(endpointAddress); 
    return (T) factory.create(); 
} 

createClient(AccessibleClient.class, "..."); 

+0

我忘了提及我使用groovy而不是普通的java。在groovy中,這個信息在運行時非常好用,你不需要使用分號和返回。我接受你的答案,因爲在Java的背景下,這是正確的。 – hitty5