[英]Creating an instance using factory with assisted parameters throws exception with Google Guice
我有两个实现的接口
public interface JobConfiguration {
void execute();
}
DecryptJobConfiguration:
public class DecryptJobConfiguration implements JobConfiguration {
@Inject
public DecryptJobConfiguration(@Assisted("secretKey") String secretKey,
@Assisted("inputImagePath") String inputImagePath,
ImageDecrypter imageDecrypter) {
// Do stuff
}
@Override
public void execute(){
// DO stuff
}
}
EncryptJobConfiguration:
public class EncryptJobConfiguration implements JobConfiguration {
@Inject
public EncryptJobConfiguration(@Assisted("inputString") String inputString,
@Assisted("secretKey") String secretKey,
@Assisted("inputImagePath") String inputImagePath,
ImageEncrypter imageEncrypter,
// Do stuff
}
@Override
public void execute() {
// Do stuff
}
}
我有一个工厂界面:
public interface JobConfigurationFactory {
@Named("encrypt")
JobConfiguration createEncrypt(@Assisted("inputString") String inputString,
@Assisted("secretKey") String secretKey,
@Assisted("inputImagePath") String inputImagePath);
@Named("decrypt")
JobConfiguration createDecrypt(@Assisted("secretKey") String secretKey,
@Assisted("inputImagePath") String inputImagePath);
}
在Google Guice中安装了哪个:
install(new FactoryModuleBuilder()
.implement(JobConfiguration.class, Names.named("encrypt"), EncryptJobConfiguration.class)
.implement(JobConfiguration.class, Names.named("decrypt"), DecryptJobConfiguration.class)
.build(JobConfigurationFactory.class));
在另一个我想创建EncryptJobConfiguration
实例的EncryptJobConfiguration
我注入JobConfigurationFactory
:
@Inject
public CommandLineArgumentValidator(JobConfigurationFactory jobConfigurationFactory){
this.jobConfigurationFactory = jobConfigurationFactory;
}
然后在其中一种方法中,我调用createEncrypt
:
jobConfigurationFactory.createEncrypt("A", "B", "C");
我希望这会返回我EncryptJobConfiguration
的实例,但是会导致此异常:
java.lang.NoSuchMethodError:com.google.common.base.Preconditions.checkState(ZLjava / lang / String; Ljava / lang / Object;)V
com.info.lten.imageencrypt.CommandLineArgumentValidator.validateArguments(CommandLineArgumentValidator.java:29:com.google.inject.assistedinject.FactoryProvider2.invoke(FactoryProvider2.java:824)com.sun.proxy。$ Proxy12.createEncrypt(Unknown Source)处)的com.infojolt.imageencrypt.CommandLineArgumentValidatorTest.validateArgumentsReturnsInputStringWhenAllRequiredFieldsAreSet(CommandLineArgumentValidatorTest.java:55)在java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
这是我第一次使用Google Guice,我不确定是否误解了它的工作原理? 我应该如何创建一个新的EncryptJobConfiguration
实例?
事实证明,我错过了这个问题的重要信息。 我正在使用Google Guice 4.0。 升级到v4.2可以解决此问题,而无需任何其他代码更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.