我正在使用Google Guice IoC容器。我有两个包,一个包含接口,另一个包含这些接口的实现。Google Guice绑定问题
的ClassFinder类从一个包返回类的列表。
当我尝试绑定接口来实现,我收到以下编译错误:无法从到方法解决方法<java.lang.Class<capture<?>>
。
该API指定到可以采取作为一个参数类和packageClass是1类。应该是什么问题?
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);
}
}
}
编辑
管理通过强制转换(类)来解决这个问题。找到该类,但绑定时抛出java.lang.NullPointerException。
你为什么这样做? –
当我在一个包中有很多类并且场景是1个接口/ 1个实现时,这是一种创建绑定的简单方法。如果有特殊情况发生,它将被区别对待。你会用什么方法? @ThorbjørnRavnAndersen – IsKernel
有多少?从Guice切换到匕首后,我不得不重新审视自己的习惯。 –