gpt4 book ai didi

java - Guice 隐式地为 AssistedInject 变量赋值

转载 作者:行者123 更新时间:2023-12-01 19:20:38 27 4
gpt4 key购买 nike

当我运行下面的代码时,我得到输出“Bar got 1234”。看起来 Guice 找不到 num2 的绑定(bind),并隐式分配了 num1 的值。这是 AssistedInject 功能的一部分吗?我在维基百科上找不到任何提及这一点的内容。将 num2 的类型更改为 float 会引发此异常(如我所料):“没有绑定(bind)用@com.google.inject.assisted.Assisted(value=)注释的java.lang.Float的实现。”

class Foo {
@Inject
public Foo(@Assisted final int num1, final Bar bar) {}

interface FooFactory {
Foo create(final int num1);
}
}

class Bar {
@Inject
public Bar(@Assisted final int num2) {
System.out.println("Bar got " + num2);
}
}

class BillingModule extends AbstractModule {
@Override
protected void configure() {
install(new FactoryModuleBuilder().implement(Foo.class, Foo.class).build(Foo.FooFactory.class));
}
}

public class App {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new BillingModule());
Foo.FooFactory fooFactory = injector.getInstance(Foo.FooFactory.class);
fooFactory.create(1234);
}
}

最佳答案

如果你看一下辅助实现,你会发现它是一个 binding annotation .

@BindingAnnotation
@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Assisted {
String value() default "";
}

标有绑定(bind)注释的相同类型的每个参数(在您的情况下为@Assisted)将具有相同的值。

关于java - Guice 隐式地为 AssistedInject 变量赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59359711/

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