Java 作为方法参数的接口
我想在方法调用中提供一个接口。根据给定的接口,该方法应该创建一个实例。为此,我使用泛型为方法提供不同类型的接口。这里有一个例子:Java 作为方法参数的接口,java,generics,groovy,Java,Generics,Groovy,我想在方法调用中提供一个接口。根据给定的接口,该方法应该创建一个实例。为此,我使用泛型为方法提供不同类型的接口。这里有一个例子: static <T> T createClient(T, String endpointAddress) { JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean() factory.setServiceClass(T.class) factory.setAddress(endpoi
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")
static T createClient(T,字符串端点地址){
JaxWsProxyFactoryBean工厂=新的JaxWsProxyFactoryBean()
工厂设置服务类(T类)
factory.setAddress(端点地址)
(T) factory.create()//错误->java.lang.IllegalArgumentException:java.lang.Class不是接口
}
//AccessibleClient是一个接口。调用方法
createClient(AccessibleClient,“http://localhost/service")
我不知道我的方法是否是合适的解决方案。你不能说
t.class
——在Java中,信息在运行时是不可用的
根据的,你可能想要这样的东西:
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, "...");
static T createClient(类T,字符串端点地址)
{
JaxWsProxyFactoryBean工厂=新的JaxWsProxyFactoryBean();
工厂设置服务类(t);
factory.setAddress(endpointAddress);
return(T)factory.create();
}
createClient(AccessibleClient.class,“…”);
(同样,在Java中,您需要分号和
return
关键字——这是Groovy还是什么?您不能说t.class
——在Java中,信息在运行时不可用
根据的,你可能想要这样的东西:
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, "...");
static T createClient(类T,字符串端点地址)
{
JaxWsProxyFactoryBean工厂=新的JaxWsProxyFactoryBean();
工厂设置服务类(t);
factory.setAddress(endpointAddress);
return(T)factory.create();
}
createClient(AccessibleClient.class,“…”);
(同样,在Java中,您需要分号和
return
关键字——这是Groovy还是什么?不应该是createClient(t param,String endpointAddress)
?您希望如何从接口创建实例?应该是createClient(AccessibleClient.class)http://localhost/service)
谢谢,我将代码更改如下:方法签名工厂中的T参数。setServiceClass(param)并使用createClient(AccessibleClient.class,…)调用该方法。它不应该是createClient(T参数,String endpointAddress)
?您希望如何从接口创建实例?它应该是createClient(AccessibleClient.class,“http://localhost/service“”
谢谢,我更改了我的代码如下:在方法签名工厂中的T params.setServiceClass(param),并使用createClient(AccessibleClient.class,…)调用了该方法。我忘了提到我使用的是groovy而不是普通java。在groovy中,此信息在运行时是可访问的,您不需要使用分号和返回。我接受您的回答,因为在java上下文中它是正确的。我忘了提到我使用的是groovy而不是普通java。在groovy中,此信息在运行时是可访问的很好,您不需要使用分号和返回。我接受您的答案,因为在java上下文中它是正确的。