我花了一些时间想知道是否有可能编写一个guice模块,该模块本身使用类型T进行参数化,并使用其type参数指定绑定。
像在此示例(不起作用)中那样:
interface A<T> {}
class AImpl<T> implements A<T>{}
interface B<T> {}
class BImpl<T> implements B<T> {}
class MyModule<T> extends AbstractModule {
@Override
protected void configure() {
bind(new TypeLiteral<A<T>>(){}).to(new TypeLiteral<AImpl<T>>(){});
bind(new TypeLiteral<B<T>>(){}).to(new TypeLiteral<BImpl<T>>(){});
}
}
我尝试了不同的方法,试图将T作为类/ TypeLiteral的实例传递给MyModule,但没有一个起作用。帮助表示赞赏。
问候,zukasz Osipiuk
为此,您将必须使用从头开始构建每个TypeLiteral com.google.inject.util.Types
。您可以这样做:
class MyModule<T> extends AbstractModule {
public MyModule(TypeLiteral<T> type) {
_type = type;
}
@Override protected void configure() {
TypeLiteral<A<T>> a = newGenericType(A.class);
TypeLiteral<AImpl<T>> aimpl = newGenericType(AImpl.class);
bind(a).to(aimpl);
TypeLiteral<B<T>> b = newGenericType(B.class);
TypeLiteral<BImpl<T>> bimpl = newGenericType(BImpl.class);
bind(b).to(bimpl);
}
@SuppressWarnings("unchecked")
private <V> TypeLiteral<V> newGenericType(Class<?> base) {
Type newType = Types.newParameterizedType(base, _type.getType());
return (TypeLiteral<V>) TypeLiteral.get(newType);
}
final private TypeLiteral<T> _type;
}
请注意,私有方法newGenericType()将不对类型执行任何控制,这是您的责任configure()
,以确保可以使用该方法正确构建泛型类型。
问题是: 创建一个名为Duo的泛型类,它有两个参数a和B。声明一个名为a类型的第一个变量,以及一个名为B类型的第二个变量。创建一个接受这两个参数的构造函数。在构造函数中,将这些参数分别分配给声明的变量。 这是我能想到的解决方案: 然后,当我继续问下一个问题时,我被绊住了。问题是: 使用问题4中的Duo类声明并创建两个对象,如下所示: a) 第一个名为sideShape的对象分别由字符串类型和整数类
我正在开发一个基于JAX-RS的Java应用程序,使用Google Guice进行依赖注入。我的代码中有以下接口: 在上面的接口中,Lock是一个定义如下的接口: 锁接口由以下类实现: LockProvider接口由以下类实现: 除了LockProvider之外,我不希望应用程序中的类知道底层锁项,这就是为什么我没有在lock接口中包含getUnderlyingLockItem。 现在,当我尝试将
我对编程和C++相当陌生。我有一个函数,我想接受以模板化值作为参数的函数指针。我的意思是... 我有这个功能: 我试过的: 结果: .h:165:22:注意:已忽略候选模板:无法将“function ,allocator >&)”与“void(*)(bool,std::vectorstd::vectorstd::allocatorstd::tuple &)”void postgrescaller:
OpenGL定义了C函数来管理资源。我编写了一个简单的包装器来以RAII的方式处理它们。函数对类似于和。但是,也有一些函数对适用于资源数组,例如和。对于前者,我编写了一个简单的类来完成这项工作,对于后者,我编写了另一个处理数组的类。然而,我注意到有时我只使用一个缓冲区或纹理,在那里我不必承担向量的费用,我想如果发布函数在开始时采用大小参数,我会专门化类析构函数,但是... 对于上述SSCCE g树
为什么我不能这样做?我得到编译错误。 那是Java8 我不认为这里违反了任何OO原则。 这真的让我很难实现通用 API...... (我试图将泛型从游戏中剔除,因为泛型API变得反直觉了)
导入java.util.ArrayList;导入java.util.List; 另外,artist.java配备了空构造函数 @IgnoreExtraProperties公共类Artist{private String ArtistId;private String ArtistName;private String ArtistAmount;private String ArtistAry; 这