你好,我正在尝试Google Guice 5. x
。我把我的类定义为:
public class Foo<T> {
// some logic here
}
它也被用于其他课程,如:
public class Bar {
private final Foo<Chocolate> provider;
public Bar(Foo<Chocolate> _choco) {
this.provider = _choco;
}
}
public abstract class BaseZoo { // in some other package in a different jar
private final Injector injector = Guice.createInjector(new MyAppModule());
private Foo<?> provider;
public String doSomething() {
if (provider == null)
this.provider = this.injector.getInstance(Foo.class);
// some other code logic.
}
}
现在,在我的模块文件(MyAppModule
)中,我将Foo定义为:
@Inject
@Provides
@Singleton
public Foo<Chocolate> getFoo(FooDependency fooDep) {
return new Foo<>(fooDep);
}
现在,当我运行代码时,GoogleGuice能够找到Foo的实例
有没有办法配置GoogleGuice来解析
Foo
绑定类型:
@Inject
@Provides
@Singleton
public Foo<?> getFoo(FooDependency fooDep) { ... }
如果你还想绑定Foo
bind(new Key<Foo<?>>() {}).to(new Key<Foo<Chocolate>>() {});
或者,使用提供者方法:
@Provides
Foo<?> provideWildcardFoo(Foo<Chocolate> chocolateFoo) {
return chocolateFoo;
}
这个问题与Weblogic 12c有关。 我有一个EAR文件,我想在各种环境中部署(dev、QA、pre-prod和prod)。然而,我的应用程序需要用户名和密码(用于连接到另一台服务器),而这四种环境中的用户名和密码并不相同。我不想在4个不同的EAR文件中打包4个不同的属性文件。我想要一个通用的EAR文件。此外,我不想在打包期间处理prod密码。 理想情况下,我希望每个环境的管理员为环境提供适当
问题内容: 前几天,我正在查看别人的代码,遇到了引起关注的一行。为简化起见,假设我有一个通用的A类和一个抽象的B类。是否允许以下实例化?如果可以,为什么? 我个人从未见过像上面这样的实例化,尽管有这样的声明: 肯定会成立。我一直在泛型中使用通配符声明方法参数,所以我可能没有经验。 问题答案: 其实不编译。自Java 5以来,它一直是非法的。 但是我想你原来的例子是这样的。后者在Java的最新版
方法在类型不适用于参数
问题内容: 可以说我有一个包含x个未知字符的字符串。我怎么能得到char nr。13或char nr。x-14? 问题答案: 首先,确保所需的数字是从开头或结尾开始的字符串 的有效索引 ,然后可以简单地使用数组下标表示法。用于获取字符串长度
问题内容: 在以下代码段中: 尽管类型似乎完全匹配,但分配是错误的。 我通过将Collection的类型指定为另一个通用参数,设计出了一种肮脏的解决方法,如下所示: 但是该参数实际上是“无关”类型,只会使API复杂化,在保持类型安全的同时,有没有什么方法可以摆脱它呢? 谢谢。 问题答案: 这样做就可以了: 您仍然可以像这样使用迭代器: 作为参考,请阅读get and put原理 (最初来自Java
“帮助系统”一节 脱字符 Shell 中的一些功能是通过特殊符号作为控制字符来实现的,上面已经介绍了很多了。这产生一个问题,如果一个文件名中,刚好包含了这些字符,比如 ; ,就很难对它进行操作。使用 less 浏览这个文件 less ;xxx less 会很快返回一个错误信息,因为并没有一个文件名作为操作对象。接着,Shell 会报告,系统中没有 xxx 这个命令。 这是因为 Shell