Java 在列表元素中保留泛型
我有一个类依赖泛型在内部绑定类型Java 在列表元素中保留泛型,java,generics,java-7,generic-list,Java,Generics,Java 7,Generic List,我有一个类依赖泛型在内部绑定类型 class C<T1, T2 extends T1> { T1 e1; T2 e2; /* stuff */ } C类{ T1-e1; t2e2; /*东西*/ } 在我的代码中,我知道,c.e1和c.e2可能没有相同的类,c.e2是c.e1类的一个子类的实例 我需要为这些cs创建一个列表,这些元素不会共享一个公共基类。尽管如此,我还是想保留这样一个事实,即列表中的每个元素都具有彼此之间的边界属性 理想情况下,我想创建一个
class C<T1, T2 extends T1> {
T1 e1;
T2 e2;
/* stuff */
}
C类{
T1-e1;
t2e2;
/*东西*/
}
在我的代码中,我知道,c.e1
和c.e2
可能没有相同的类,c.e2
是c.e1
类的一个子类的实例
我需要为这些c
s创建一个列表
,这些元素不会共享一个公共基类。尽管如此,我还是想保留这样一个事实,即列表中的每个元素都具有彼此之间的边界属性
理想情况下,我想创建一个列表,因为T2
在C
的声明中是有界的,所以即使使用通配符,您也会始终保留它是T1
的子类型这一事实。i、 e.第二个类型参数扩展第一个类型参数是C
的一个特征。
因此,您只需使用List我就可以找到一个解决方案,在自定义(非泛型)类型中对类型约束进行编码
现在我有了这些课程:
class MainLogic {
List<TypeHelper<?,?>> elements = new ArrayList<>();
<T1, T2 extends T1> void addElement(T1 e1, T2 e2) {
this.elements.add(new TypeHelper<T1,T2>(e1, e2));
}
void logic() {
for (TypeHelper<?, ?> element: elements)
element.logicHelper(this);
}
<T1, T2 extends T1> void logicHelper(T1 e1, T2 e2) {
// here finally I have the variables constrained
}
}
class TypeHelper<T1, T2 extends T1> {
T1 e1;
T2 e2;
void logicHelper(MainLogic ml) {
ml.logicHelper(e1, e1);
}
}
类主逻辑{
不幸的是列表元素不是均匀的;我的意思是我需要同时放置ac1=newc()
和c2=newc()
,但在Iface1
和Iface2
之间以及Impl1
和Impl2
之间没有基类。因此我不能有列表,因为没有T1
或T2
开始with@VitoDeTullio这只是一个例子,重点是你可以使用list问题i如果我使用List@VitoDeTullio也许我误解了你的问题。如果你能提供更多关于如何使用列表的示例,这会有所帮助……但是如果你根本不想丢失类型,你可以使用2个列表,1是列表问题是我有一个(潜在的)类型的数量不确定。目前有7个接口和10个实现。为每个组合提供一个列表本身并不符合列表的目的,但是您不需要logicHelper
在TypeHelper
中,您只需调用this.logicHelper(element.e1,element.e2)
并且它是有效的。请看这里:如果TypeHelper
在这里是C
,那么e1
的类型将始终扩展e2
的类型。
public static <T1, T2 extends T1> void m(List<C<T1, T2>> list) {...}
public static <T1> void m(List<C<T1, ? extends T1>> list) {...}
class MainLogic {
List<TypeHelper<?,?>> elements = new ArrayList<>();
<T1, T2 extends T1> void addElement(T1 e1, T2 e2) {
this.elements.add(new TypeHelper<T1,T2>(e1, e2));
}
void logic() {
for (TypeHelper<?, ?> element: elements)
element.logicHelper(this);
}
<T1, T2 extends T1> void logicHelper(T1 e1, T2 e2) {
// here finally I have the variables constrained
}
}
class TypeHelper<T1, T2 extends T1> {
T1 e1;
T2 e2;
void logicHelper(MainLogic ml) {
ml.logicHelper(e1, e1);
}
}