gpt4 book ai didi

java - 尝试在 Jersey 2.27 中绑定(bind)工厂类时出现编译错误

转载 作者:太空宇宙 更新时间:2023-11-04 10:20:39 25 4
gpt4 key购买 nike

我正在使用 Jersey 2.27 构建 Java REST API,在我的测试类中(如下所示),我收到以下编译错误:Cannot resolve method 'bindFactory(java.lang.Class<LdapServiceFactory>)'

我不明白为什么这不能编译。 bindFactory方法有一个类型为 Class<? extends Supplier<T>> 的参数,我的工厂类正在实现 Supplier<LdapService>如下所示。有人可以向我解释为什么这不能编译吗?

PS:这些只是完整代码的片段,以使事情更加清晰。

import org.glassfish.jersey.internal.inject.AbstractBinder;

public class AppTest extends JerseyTest {
@Override
protected Application configure() {
return new ResourceConfig()
.packages(App.class.getPackage().getName())
.register(new AbstractBinder() {
@Override
protected void configure() {
bindFactory(LdapServiceFactory.class).to(LdapService.class);
}
});
}
}

这是我的 LdapServiceFactory类看起来像:

public class LdapServiceFactory<T> implements Supplier<LdapService> {
@Override
public LdapService<T> get() {
return createLdapService(DEFAULT_PROPERTIES_FILE);
}
}

最后,LdapService类:

public interface LdapService<T> {
List<T> request(String filter, String[] attributes, ResponseHandler<T> responseHandler) throws FilterException, ServerException;
}

最佳答案

从工厂类中删除泛型类型。您应该做的是将具体类型添加到 Supplier

public class LdapServiceFactory implements Supplier<LdapService<YourType>> {
@Override
public LdapService<YourType> get() {
return createLdapService(DEFAULT_PROPERTIES_FILE);
}
}

然后当你绑定(bind)它时,执行

bindFactory(LdapServiceFactory.class)
.to(new GenericType<LdapService<YourType>>() {});

这可以确保注入(inject)时的类型安全。

@Inject
private LdapService<YourType> service;

关于java - 尝试在 Jersey 2.27 中绑定(bind)工厂类时出现编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51208160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com