Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 作为方法参数的接口_Java_Generics_Groovy - Fatal编程技术网

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上下文中它是正确的。