2013-04-15 7 views
1

Я хотел бы предоставить интерфейс в вызове метода. в зависимости от данного интерфейса метод должен создать экземпляр. для этой цели я использую generics для предоставления различных методов интерфейса. здесь пример:inteface как метод параметр

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

не должен' t это 'createClient (T param, String endpointAddress)'? – sanbhat

+0

Как вы ожидаете создать экземпляр из интерфейса? – Apurv

+2

Это должно быть 'createClient (AccessibleClient.class," http: // localhost/service ")' – gontard

ответ

1

Вы не можете сказать T.class - на Java эта информация недоступна во время выполнения.

Согласно gontard 's comment, вы, вероятно, хотите что-то вроде этого: (? Кроме того, в 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

Смежные вопросы