interface作为方法参数

时间:2013-04-15 10:11:19

标签: java generics groovy

我想在方法调用中提供一个接口。取决于给定的接口,该方法应该创建一个实例。为此,我使用泛型为该方法提供了不同类型的接口。这里有一个例子:

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 个答案:

答案 0 :(得分:1)

你不能说T.class - 在Java中,信息在运行时不可用。

根据gontardcomment,你可能想要这样的东西:

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, "...");

(另外,在Java中你需要分号和return个关键字 - 这是Groovy还是什么?)