gpt4 book ai didi

java - Google Guice 绑定(bind)问题

转载 作者:行者123 更新时间:2023-12-02 05:41:00 26 4
gpt4 key购买 nike

我正在使用 Google Guice IoC 容器。我有两个包,一个包含接口(interface),另一个包含这些接口(interface)的实现。

ClassFinder 类返回包中的类列表。

当我尝试将接口(interface)绑定(bind)到实现时,我收到以下编译错误:无法将方法解析为 <java.lang.Class<capture<?>>to 方法。

API指定to可以作为参数Class,packageClass为Class。应该是什么问题?

public void autoMatch(String basePackageName)
{
String interfacesPackage = basePackageName + "." + interfacesPackageName;
String implementationPackage = basePackageName + "." + implementationPackageName;

List<Class<?>> interfaces = ClassFinder.find(interfacesPackage);
List<Class<?>> implementations = ClassFinder.find(implementationPackage);
for(Class<?> packageClass : implementations)
{
String name = packageClass.getSimpleName();
try
{
Class<?> foundInterface
= interfaces.stream()
.filter(packageInterface -> packageInterface.getSimpleName().equals(name + "Interface"))
.findFirst().get();
bind(foundInterface).to(packageClass);
}
catch (NoSuchElementException exception)
{
Log.error("IoC", "Could not match interface to implementation", exception);
}
}
}

编辑

通过强制转换到(类)成功解决了该问题。该类已找到,但绑定(bind)时抛出 java.lang.NullPointerException。

最佳答案

问题是您在类实现接口(interface)的编译时丢失了信息。从编译器的角度来看,您最终会得到两个不相关的 Class<?>对象,并且由于 Guice 是用泛型编写的,因此没有方法将它们相互绑定(bind)。

未经测试:考虑使用Class而不是Class<?>所以不使用泛型。

也就是说,我建议您手动写出 20-30 个绑定(bind)。依赖注入(inject)的想法是将接口(interface)与其实现分离,您的方法将在它们之间引入微妙的、难以调试的运行时依赖关系,我认为这不是一件好事。

关于java - Google Guice 绑定(bind)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24519896/

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